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

时间:2020-03-18 01:24:44

标签: node.js docker cloud

不确定我为什么收到SequelizeConnectionRefusedError。我确认可以在本地运行所有docker映像,但是当我尝试运行docker-compose up命令时,我遇到了错误:连接ECONNREFUSED 127.0.0.1:5432。 enter image description here

1 个答案:

答案 0 :(得分:2)

根据我对您问题的理解,以下是我的假设:

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

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

在Linux机器中通过添加network_mode: host来解决问题是很简单的,这样容器将与主机在同一网络中运行,因此能够访问Postgres服务器。但是,由于在Mac上实施了Docker,而Docker主机实际上是在MacOS顶部的隐藏VM中运行的,因此此解决方案在这里不起作用。

一些建议:

  1. 迁移Postgres服务器以使其在docker容器中运行(如果需要,可以在相同的docker-compose文件中运行)。您始终可以进行端口映射,以便从Postbird中访问它。
  2. 或者,如果您仍然坚持在MacOS上本地运行它,那么这里的workaround涉及在同一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
  1. 您现在可以在localhost:35432上使用Postbird连接到新的postgres。

编辑1

如果您在AWS RDS中运行Postgres实例,则无需进行以上更改,但请执行其他步骤:

  • 请确保您的网络可以通过端口5432到达RDS终结点。此处的最佳实践是更新安全组入站规则,以仅允许来自您的IP地址的端口5432(如何实现)这个答案,但可以从AWS文档中轻松找到)
  • UDAGRAM_HOST的值更新为可以从AWS RDS控制台找到的RDS端点。