gpt4 book ai didi

node.js - ECONNREFUSED for Postgres on nodeJS with dockers

转载 作者:IT老高 更新时间:2023-10-28 12:37:22 29 4
gpt4 key购买 nike

我正在使用 postgresql 构建一个在 NodeJS 上运行的应用程序。我使用 SequelizeJS 作为 ORM。为了避免使用真正的 postgres 守护进程并在我自己的设备上安装 nodejs,我正在使用带有 docker-compose 的容器。

当我运行 docker-compose up它启动 pg 数据库

database system is ready to accept connections

和 nodejs 服务器。但服务器无法连接数据库。

Error: connect ECONNREFUSED 127.0.01:5432

如果我尝试在不使用容器的情况下运行服务器(在我的机器上使用真正的 nodejs 和 postgresd),它可以工作。

但我希望它能够与容器一起正常工作。我不明白我做错了什么。

这里是 docker-compose.yml 文件

web:
image: node
command: npm start
ports:
- "8000:4242"
links:
- db
working_dir: /src
environment:
SEQ_DB: mydatabase
SEQ_USER: username
SEQ_PW: pgpassword
PORT: 4242
DATABASE_URL: postgres://username:pgpassword@127.0.0.1:5432/mydatabase
volumes:
- ./:/src
db:
image: postgres
ports:
- "5432:5432"
environment:
POSTGRES_USER: username
POSTGRES_PASSWORD: pgpassword

有人可以帮帮我吗?

(喜欢 docker 的人 :))

最佳答案

您的 DATABASE_URL 指的是 127.0.0.1,即 loopback adapter (更多 here)。这意味着“连接到我自己”。

在同一主机上运行两个应用程序(不使用 Docker)时,它们都可以在同一适配器(也称为 localhost)上寻址。

在容器中运行这两个应用程序时,它们不像以前那样都在本地主机上。相反,您需要将 web 容器指向 docker0 适配器上的 db 容器的 IP 地址 - 其中 docker-compose 为您设置。

变化:

127.0.0.1CONTAINER_NAME(例如 db)

例子:

DATABASE_URL: postgres://username:pgpassword@127.0.0.1:5432/mydatabase

DATABASE_URL: postgres://username:pgpassword@db:5432/mydatabase

这要归功于 Docker 链接:web 容器有一个文件 (/etc/hosts),其中的 db 条目指向db 容器所在的 IP。这是系统(在本例中为容器)在尝试解析主机名时首先查看的位置。

关于node.js - ECONNREFUSED for Postgres on nodeJS with dockers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357567/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com