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
相关产品推荐
相关产品推荐

