首页 >数据库 >mysql教程 >当我从 Node.js 应用程序连接到 MySQL 容器时,为什么会出现 ECONNREFUSED?

当我从 Node.js 应用程序连接到 MySQL 容器时,为什么会出现 ECONNREFUSED?

Barbara Streisand
Barbara Streisand原创
2024-11-12 01:43:02880浏览

Why am I getting ECONNREFUSED when connecting to MySQL container from my Node.js application?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn