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

Docker中运行的Node.js应用无法连接宿主机MySQL数据库问题求助

问题核心原因

你的数据库连接配置中host值设为了localhost,当应用运行在Docker容器内时,localhost指向的是容器自身的网络空间,而非运行MySQL服务的宿主机,因此会抛出127.0.0.1:3306连接被拒绝的错误。你提到的容器对外暴露3300端口是Node.js应用的服务端口,和数据库连接逻辑无关,该配置没有问题。

修复方案

快速临时修复

根据你的Docker运行环境修改连接配置的host值即可:

  • 若使用Docker Desktop(Mac/Windows版):直接将host改为Docker内置的宿主机域名host.docker.internal
  • 若使用Linux版Docker:启动容器时添加参数--add-host=host.docker.internal:host-gateway,之后同样将host改为host.docker.internal,或者直接填宿主机的物理IP地址

修改后的代码示例如下:

const DATABASE = MYSQL.createPool({
    host    : 'host.docker.internal', // 替换原有localhost
    user    : dbconfig.DATABASE_USER,
    password: dbconfig.DATABASE_CREDENTIAL,
    database: dbconfig.DATABASE_USING,
    multipleStatements: true
});

修改后还需要确认两个MySQL侧的配置:

  • MySQL服务没有绑定仅本地访问,即MySQL配置文件中bind-address的值不是127.0.0.1,可改为0.0.0.0或者Docker网段地址
  • 你使用的数据库账号授权了Docker网段的访问权限,可执行SQLGRANT ALL ON 你的数据库名.* TO '你的数据库用户名'@'172.17.0.0/255.255.0.0' IDENTIFIED BY '你的数据库密码';完成授权

规范生产方案

推荐将MySQL也使用Docker容器部署,和Node.js应用加入同一个Docker自定义网络,此时直接将host值改为MySQL容器的服务名即可,不需要暴露MySQL端口到宿主机,安全性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 16:15:04