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

Node.js连接Docker MySQL容器报错getaddrinfo ENOTFOUND求助

解决Node.js连接Docker MySQL容器的getaddrinfo ENOTFOUND错误

问题根源分析

你遇到的getaddrinfo ENOTFOUND 98b6c7aeb8af错误,核心原因是你的Node.js代码尝试用容器ID作为数据库主机地址,但宿主机无法解析Docker容器ID对应的网络地址。此外还有几处配置错误导致连接失败:


具体修复步骤

1. 修正数据库主机地址(SQL_SERVER)

容器ID是Docker内部标识,宿主机无法直接解析。你有两个可选方案:

  • 方案一(推荐):使用容器名称mysql1(创建容器时指定的--name mysql1)
  • 方案二:使用localhost(已映射端口-p 3306:3306,宿主机可通过本地端口访问)

修改.env文件中的SQL_SERVER:

# 二选一即可
SQL_SERVER=mysql1
# 或者 SQL_SERVER=localhost

2. 修正数据库用户名格式

MySQL用户名不需要带@localhost后缀,后缀是用户权限的主机限制规则,连接时只需填写用户名本身。修改.env中的SQL_USER:

SQL_USER=root

3. 统一数据库密码(修复拼写错误)

你的.env文件中MYSQL_ROOT_PASSWORD拼写错误(passowrd少一个r),同时创建容器时用-e 'MYSQL_ROOT_PASSWORD=password'设置了密码,两者不一致会导致认证失败。统一密码:

MYSQL_ROOT_PASSWORD=password

4. 清理容器创建命令的冗余配置

你同时使用--env-file .env和-e参数设置环境变量,可能导致变量冲突。建议只保留一种方式,比如去掉重复的-e参数:

docker run \
  --name mysql1 \
  --env-file .env \
  -p 3306:3306 \
  -d mysql:latest 

注意:修改.env后,需删除旧容器重新创建,确保新配置生效:

docker stop mysql1 && docker rm mysql1
# 重新执行上面的容器创建命令

5. 验证Node.js连接配置

确保dbConfig使用正确的变量,最终配置示例:

const dbConfig = {
    host: process.env.SQL_SERVER, // 现在是mysql1或localhost
    user: process.env.SQL_USER, // 现在是root
    password: process.env.MYSQL_ROOT_PASSWORD, // 正确的password
    database: process.env.SQL_DATABASE,
    port: process.env.SQL_PORT || 3306
};

测试连接

完成以上修改后,重新运行Node.js测试代码,即可正常连接MySQL容器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:12:47