为什么从 Node.js 连接到 MySQL Docker 容器时会出现 ECONNREFUSED?

DDD
发布: 2024-11-10 22:22:03
原创
139 人浏览过

Why Am I Getting ECONNREFUSED When Connecting to a MySQL Docker Container from Node.js?

连接到 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板