连接到 MySQL Docker 容器时 Node.js ECONNREFUSED
在涉及 MySQL 容器和 Node.js Web 服务的 Docker compose 设置中,尽管已建立 Docker 链接并正确配置了数据库设置,但从 Node.js 连接到 MySQL 仍导致 ECONNREFUSED 错误。
问题陈述
问题源于对 Docker 端口映射的误解。在 Docker compose 文件中:
ports: - "3307:3306"
这将主机端口 3307 映射到容器端口 3306。虽然这允许从主机从外部访问 MySQL 容器的数据库,但它不会更改容器的内部端口
解决方案
为了解决该问题,调整了 Node.js 配置和 Docker 命令:
Node.js配置
const config = { host: 'mysql', // Use the Docker service name instead of 'localhost' database: 'mydb', port: '3306', // Connect to the container's native port user: 'mysql', password: '1234', connectionLimit: 10 }
Docker 命令
command: ["./wait-for-it.sh", "mysql:3306"] // Wait for the MySQL container to start on port 3306
说明
通过使用 Docker 服务名称 ( mysql)作为 Node.js 配置中的主机,我们确保尝试连接到容器,而不是主机。此外,通过将 wait-for-it 脚本参数更改为 3306,我们等待 MySQL 在容器内的本机端口上准备就绪。
实施这些更改后,ECONNREFUSED 错误得到解决,并且Node.js 应用程序可以成功连接到 MySQL Docker 容器。
以上是当我从 Node.js 应用程序连接到 MySQL 容器时,为什么会出现 ECONNREFUSED?的详细内容。更多信息请关注PHP中文网其他相关文章!