mysql - NodeJS 无法连接到 Docker 容器内的 MYSQL 最新版本
问题描述
NodeJS 无法连接到 MySQL 最新版本或 8 及以上版本,并遇到以下错误消息:
ERROR: connect ECONNREFUSED 172.21.0.2:3306
这是我的 docker-compose 文件
version: '2.1'
services:
db:
build: ./db
networks:
- ppshein
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
healthcheck:
test: "exit 0"
node:
build: ./app
depends_on:
db:
condition: service_healthy
ports:
- 3000:3000
networks:
- ppshein
networks:
ppshein:
这是数据库 Dockerfiles
FROM mysql:5
COPY init_db.sql /docker-entrypoint-initdb.d/
init_db.sql
CREATE DATABASE IF NOT EXISTS database_docker;
GRANT ALL PRIVILEGES on database_docker.*
TO 'root'@'%' IDENTIFIED BY 'ppshein123456'
WITH GRANT OPTION;
NodeJS Dockerfile
FROM node:9.10.1
ENV NODE_ENV=docker
COPY ./ /var/www
WORKDIR /var/www/
RUN yarn install && yarn add sequelize-cli -g
EXPOSE 3000
ENTRYPOINT [ "npm", "run", "docker" ]
配置文件
"docker": {
"username": "root",
"password": "ppshein123456",
"database": "database_docker",
"host": "db",
"dialect": "mysql",
"logging": false
}
但是当我更改为FROM mysql:5
butFROM mysql
或时,一切都在工作文件中FROM mysql:8
,我遇到了上面提到的错误。请让我知道我需要错过哪种配置?
解决方案
我找到了解决该身份验证问题的方法。我需要添加以下命令--default-authentication-plugin=mysql_native_password
并MYSQL_ROOT_PASSWORD=ppshein123456
存档docker-compose
。
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- 3306:3306
environment:
- MYSQL_ROOT_PASSWORD=ppshein123456
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
推荐阅读
- python - macOS 脚本编辑器 - AttributeError:模块“枚举”没有属性“IntFlag”
- javascript - 'RangeError: 无效的时间值'
- c# - 无法隐式转换类型 List
列出 错误 - spring-boot - 控制不来查看 i。春季启动中的 JSP /HTML
- python - 烧瓶并使用日期时间处理 Zeep 响应
- java - 如何使用 PageFactory.initElement(driver, this) 的索引号来识别 DOM 中的两个相同元素?
- javascript - Google oauth2 日历 API 登录事件 gapi.auth2.getAuthInstance().isSignedIn.listen() 未在 Safari 中触发
- python - 在 TensorFlow Keras 中寻找 MSLE
- caching - 上下文切换:如果新进程的虚拟内存映射到与前一个进程相同的物理地址,内存保护是如何实现的?
- http - Linux 上的 Telnet - 我可以将 Transfer-encoding: chunked 设置为 GET 选项吗?