You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下MySQL 8与Node.js连接失败排查求助

Docker容器中Node.js无法连接MySQL的问题

问题概述

查阅了大量关于连接Docker容器中MySQL实例的内容,尝试多种解决方案均无效。现有可正常运行的PHP应用与phpMyAdmin(均为Docker镜像),PHP内部能正常连接MySQL,但使用原生Node.js示例服务器连接时始终被拒绝:最初出现errno -4078错误,改用tcp-connect后变为errno 1045(权限拒绝)。

启动命令与运行方式

MySQL启动命令

docker run --name mysql -d -e MYSQL_ALLOW_EMPTY_PASSWORD=TRUE --expose 3306 -p 3036:3036 mysql

Node.js应用启动方式

两种方式均尝试过:

  1. 直接执行:node app.js
  2. 构建Docker镜像后运行:
docker run --name app -d --link mysql:db -p 8081:8080 app

PHP应用启动方式完全相同且可正常运行,但Node.js不行。同一用户名和密码组合可通过bash shell中的mysql CLI手动登录,说明密码无误。

Node.js应用Dockerfile内容

FROM node
WORKDIR /usr/src/app
COPY package.json .
COPY package-lock.json .
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "app.js" ]

版本信息

  • MySQL:8.1.0
  • Docker:24.0.5

现有用户与无效尝试

phpMyAdmin中有两个可正常使用的用户:无密码的root用户,以及拥有全部权限、带密码的用户。已尝试从外部连接Docker容器中的MySQL,暴露3306端口(似乎有效),启动应用时的--link指令也似乎生效,应用确实在尝试连接,但仅提示“连接被拒绝”。尝试过以下方案均未解决问题:

  • 环境变量配置方案
  • tcp-connect连接方式
  • 切换为mysql_native_password认证插件

疑问

  1. 能否不绕过安全机制,直接提供MySQL所需的认证信息(比如证书、密钥对等)?
  2. 原本以为PHP能正常连接的配置,Node.js也应适用,但实际并非如此。PHP的处理方式有何不同?(PHP运行在基于Alpine Nginx的Docker镜像中,是一个仅展示少量数据库内容页面的原生应用)

补充说明

版主推荐的答案完全无法解决我的问题:

  • 它提到的配置在MySQL 8中不存在
  • 新版MySQL 8配置文件中没有BIND语句
  • 配置文件的位置也不一样
  • 该推荐答案并未出现在“相似问题”列表中

请重新开放此问题以获取进一步帮助。

内容的提问来源于stack exchange,提问作者furball

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:10:20