docker-compose nodejs 在运行 docker composer 时出错。 mysql ER_NOT_SUPPORTED_AUTH_MODE
Posted
技术标签:
【中文标题】docker-compose nodejs 在运行 docker composer 时出错。 mysql ER_NOT_SUPPORTED_AUTH_MODE【英文标题】:docker-composer node js give error when running the docker composer . mysql ER_NOT_SUPPORTED_AUTH_MODE 【发布时间】:2019-11-01 00:28:31 【问题描述】:我正在尝试使用 docker 部署我的节点 js 应用程序,但是当我运行 docker compose 时,它最后会出现错误。 我看到了一些解决方案,例如
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'
,但是在 docker 中的何处指定此查询。
docker-compose.yml
version: '3'
services:
db:
build:
context: .
dockerfile: ./docker/Dockerfile-mysql
container_name: mydb
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_DATABASE=dbautokab
- MYSQL_USER=root
- MYSQL_PASSWORD=
networks:
- helicopter-network
healthcheck:
test: "exit 0"
helicopter-api:
build:
context: .
dockerfile: ./docker/Dockerfile-api
depends_on:
- db
networks: ['helicopter-network']
environment:
- PORT=3000
- DATABASE_HOST=db
- DATABASE_PASSWORD=
- EGG_SERVER_ENV=local
- NODE_ENV=development
ports:
- "3000:3000"
networks:
helicopter-network:
driver: bridge
Dockerfile-api
FROM node:10-slim
USER node
RUN mkdir -p /home/node/app
WORKDIR /home/node/app
COPY --chown=node package*.json ./
RUN npm install
COPY --chown=node . .
COPY wait-for-it.sh /
ENV HOST=0.0.0.0 PORT=3000
EXPOSE $PORT
CMD /wait-for-it.sh db:3306 -- npm start
Dockerfile-mysql
FROM mysql
COPY ./docker/init_db.sql /docker-entrypoint-initdb.d/
init_db.sql
CREATE DATABASE IF NOT EXISTS dbautokab;
GRANT ALL PRIVILEGES on dbautokab.*
TO 'root'@'%'
WITH GRANT OPTION;
错误
连接到 db 时出错: 错误:ER_NOT_SUPPORTED_AUTH_MODE: 客户端不支持服务器请求的认证协议; 考虑升级 MySQL 客户端
【问题讨论】:
【参考方案1】:使用时:
来自 mysql
Docker 拉取最新版本,在本例中(8.0)不支持认证类型
您可以在 Dockerfile 上指定版本标签,例如:
来自 mysql:5.7.26
如果你想留在Mysql 8.0。
你应该在容器内执行这个命令行:
docker exec -it container_name mysql -u root -p [root-password] mysql -e "update user set authentication_string=password(''), plugin='mysql_native_password' where user='root';"
或者连接到你的容器并执行命令:
docker exec -it container_name /bin/bash mysql -u root -p [root-password] mysql -e "更新用户集 authentication_string=password(''), plugin='mysql_native_password' where user='root';"
希望对你有帮助
【讨论】:
感谢它有效,但现在我遇到了新问题。我已经为此发布了新问题。 link【参考方案2】:我相信使用自定义默认身份验证插件启动服务器应该可以解决问题。在这种情况下,您可以覆盖docker-compose.yml
中的command
属性。
# ...
services:
db:
# ...
command: --default-authentication-plugin=mysql_native_password
# ...
【讨论】:
以上是关于docker-compose nodejs 在运行 docker composer 时出错。 mysql ER_NOT_SUPPORTED_AUTH_MODE的主要内容,如果未能解决你的问题,请参考以下文章
将 NodeJS Docker 容器连接到 MySQL Docker 容器 - docker-compose 3
docker-compose:nodejs容器不与postgres容器通信
使用 Apollo Express、Nginx 和 docker-compose 保护 websocket