连接到 MySQL Docker 容器:解决 ECONNREFUSED
本文解决了尝试从以下位置连接到 MySQL Docker 容器时经常遇到的 ECONNREFUSED 错误: Node.js。
背景
在多容器 Docker 化应用程序中,通常有一个数据库容器(例如 MySQL)并从其他容器连接到它(例如,Node.js Web 应用程序)。但是,此连接可能会失败并出现 ECONNREFUSED 错误,表明 Node.js 应用程序无法访问数据库。
了解问题
配置 Docker 容器时,端口映射至关重要。一个常见的误解是端口映射(例如“3307:3306”)意味着容器正在侦听端口 3307。但是,容器通常侦听其内部端口。对于 MySQL,它侦听容器内的端口 3306。
解决方案:修改 Node.js 配置和 DNS
要解决此问题,请修改 Node .js 配置连接到端口 3306 上的数据库并指定正确的 DNS。在本例中,DNS 为 'mysql',如 docker-compose.yml 中所定义。
这将更新 Node.js 配置,如下所示:
const config = { host: 'mysql', // Replace 'localhost' with the container DNS database: 'mydb', port: '3306', user: 'mysql', password: '1234', connectionLimit: 10 }
此外,修改docker-compose.yml 中的命令:
command: ["./wait-for-it.sh", "mysql:3306"] // Update the port number
这可确保“wait-for-it.sh”脚本等待 MySQL 侦听容器内的端口 3306。
结论
通过了解端口映射机制并更新 Node.js 配置和 DNS,可以解决 ECONNREFUSED 错误并在 Node.js 应用程序和 MySQL 之间建立成功的连接Docker 化环境中的容器。
以上是为什么从 Node.js 连接到 MySQL Docker 容器时会出现 ECONNREFUSED?的详细内容。更多信息请关注PHP中文网其他相关文章!