Docker Compose 使用 MySQL 和 NodeJS 时出现错误 ECONNREFUSED 127.0.0.13306

mysqlJS

1个回答

写回答

c d

2025-06-23 15:50

+ 关注

MySQL
MySQL

使用 Docker Compose 来构建和管理多个容器的应用程序是非常方便的。然而,有时在使用 Docker Compose 配置 MySQL 和 NodeJS 时,可能会遇到一个常见的错误:ECONNREFUSED 127.0.0.1:3306。这个错误通常表示 NodeJS 应用程序无法连接到 MySQL 数据库。

问题的根本原因

这个错误的根本原因是因为容器之间默认是相互隔离的,它们不能直接通过 localhost 或 127.0.0.1 来互相访问。在 Docker Compose 中,每个服务都运行在自己的容器中,并拥有自己的网络命名空间。因此,当 NodeJS 容器尝试连接到 MySQL 容器时,它会尝试连接到本地主机(localhost)上的 MySQL 服务,而不是连接到 MySQL 容器。

解决方法

要解决这个问题,我们需要使用 Docker Compose 内置的网络功能来连接这两个容器。Docker Compose 默认会为我们创建一个网络,我们可以在配置文件中指定服务之间的依赖关系。

接下来,我们将演示一个简单的示例,展示如何在 Docker Compose 中正确配置 MySQL 和 NodeJS,以避免 ECONNREFUSED 错误。

首先,我们创建一个名为 docker-compose.yml 的文件,并在其中定义两个服务:MySQL 和 NodeJS。

yaml

version: '3'

services:

db:

image: MySQL:latest

environment:

MySQL_ROOT_PASSword: root

MySQL_Database: myDatabase

app:

build:

context: .

dockerfile: Dockerfile

ports:

- 3000:3000

depends_on:

- db

在上面的示例中,我们定义了两个服务:db 和 app。db 服务使用 MySQL 的官方镜像,并设置了 root 用户的密码和数据库名称。app 服务则构建了一个 NodeJS 应用程序,并将容器的 3000 端口映射到本地主机的 3000 端口。此外,我们还在 app 服务的 depends_on 部分指定了它依赖于 db 服务。

使用 Docker Compose 启动应用

一旦我们完成了配置文件的编写,我们可以使用以下命令来启动我们的应用程序:

bash

docker-compose up

这将启动两个容器,并将它们连接到同一个网络中。NodeJS 容器现在可以使用 db 服务的名称来连接到 MySQL 容器,而不是使用 localhost。

在使用 Docker Compose 配置 MySQL 和 NodeJS 时,遇到 ECONNREFUSED 127.0.0.1:3306 错误是很常见的。这是因为容器之间默认是相互隔离的,无法直接通过 localhost 或 127.0.0.1 进行访问。为了解决这个问题,我们需要使用 Docker Compose 的网络功能来将这两个容器连接到同一个网络中。通过正确配置服务之间的依赖关系,我们可以避免这个错误,并成功地连接到 MySQL 数据库。

希望本文对你理解并解决这个问题有所帮助!

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号