错误:连接 ECONNREFUSED 127.0.0.1:5432 docker-compose up

Mil*_*hah 1 cloud node.js docker

不知道为什么我会收到 SequelizeConnectionRefusedError。我验证了我能够在本地运行所有 docker 映像,但是当我尝试运行“docker-compose up”命令时,我遇到错误:connect ECONNREFUSED 127.0.0.1:5432。 在此输入图像描述

Ngu*_*huc 5

根据我对你的问题的理解,我的假设如下:

  • 您正在使用 MacOS
  • 您的 Postgres 服务器在主机操作系统中运行,而不是在另一个 Docker 容器中运行。

话虽如此,对于希望将 docker 容器连接到主机中运行的 Postgres 服务器的 MacOS 用户来说,这是一个常见问题。由于它们不在同一网络中,因此您的容器无法到达 Postgres 服务器,因此,通过它连接到它127.0.0.1:5432肯定无法访问。

network_mode: host通过添加容器在与主机相同的网络中运行,从而能够到达 Postgres 服务器,在 Linux 机器中解决这个问题是很简单的。然而,由于 Docker 在 Mac 上的实现,其中 Docker 主机实际上是在 MacOS 之上的隐藏虚拟机中运行,因此该解决方案在这里不起作用。

一些建议:

  1. 迁移您的 Postgres 服务器以在 Docker 容器中运行(docker-compose如果愿意,可以在同一个文件中)。您始终可以进行端口映射,以便从 Postbird 访问它。
  2. 或者,如果您仍然坚持在 MacOS 本地运行它,这里有一个解决方法,涉及在同一 Docker 网络中创建另一个 docker 容器并执行恢复 SSH 隧道。

以下是将 Postgres 服务器迁移到使用 docker 容器的步骤

  1. docker-compose使用新的数据库服务更新您的:
db:
    image: postgres:10.5-alpine
    environment:
        POSTGRES_USER: $UDAGRAM_USERNAME
        POSTGRES_PASSWORD: $UDAGRAM_PASSWORD
        POSTGRES_DB: $UDAGRAM_DATABASE
    ports:
        - 35432:5432
    volumes:
        - <path where you want to persist your database data>:/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)
  1. 您现在可以使用 Postbird 连接到新的 postgres:localhost:35432

编辑1

如果您在 AWS RDS 中运行 Postgres 实例,则无需进行上述更改,而是按照其他步骤操作:

  • 确保您的网络可以通过端口 5432 到达 RDS 终端节点。此处的最佳实践是更新安全组入站规则,以仅允许来自您的 IP 地址的端口 5432(如何执行此操作超出了本答案的范围,但可以从 AWS 文档轻松找到)
  • 将 的值更新UDAGRAM_HOST为可从 AWS RDS 控制台找到的 RDS 终端节点。