Docker环境下Node.js应用无法连接MySQL服务问题求助
报错原因说明
Error: connect ECONNREFUSED 127.0.0.1:3306 出现的核心原因是Docker容器拥有独立的网络命名空间,容器内部的127.0.0.1指向的是容器自身的环回地址,既不是宿主机地址,也不是其他Docker容器的地址。该问题确实和MySQL运行在独立容器直接相关,但本质是网络配置错误,并非容器化部署本身的问题。
连接Docker内部MySQL的解决步骤
- 第一步:创建自定义Docker网络,用于容器间通信:
docker network create app-net - 第二步:启动MySQL容器时添加参数
--network app-net --name mysql,将MySQL容器加入该网络并固定容器名称 - 第三步:修改Node.js应用中的数据库连接配置,将原
127.0.0.1的数据库地址替换为MySQL容器的名称mysql,Docker内置DNS会自动解析到对应容器的IP - 第四步:修改Node.js容器启动命令,添加
--network app-net参数,完整命令如下:winpty docker run \ -it \ --rm \ -v ${PWD}:/app \ -v /app/node_modules \ -p 4001:4000 \ -e CHOKIDAR_USEPOLLING=true \ --network app-net \ gdns/node-app
连接宿主机WAMP中MySQL的实现方法
可以正常连接,按以下步骤配置即可:
- 修改WAMP的MySQL配置,将绑定地址从
127.0.0.1改为0.0.0.0,重启WAMP的MySQL服务 - 进入MySQL执行授权命令,允许Docker网段的IP访问:
GRANT ALL PRIVILEGES ON 你的数据库名.* TO '你的数据库账号'@'172.17.0.0/16' IDENTIFIED BY '你的数据库密码'; FLUSH PRIVILEGES; - 修改Node.js应用的数据库连接地址,WSL2环境下直接填Docker内置域名
host.docker.internal即可自动解析到宿主机IP
内容的提问来源于stack exchange,提问作者Akhilesh
相关产品推荐
相关产品推荐

