ECONNREFUSED for Postgres on nodeJS with dockers
·
问题:ECONNREFUSED for Postgres on nodeJS with dockers
我正在使用 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
有人可以帮我吗?
(喜欢码头的人:))
解答
你的DATABASE_URL
指的是127.0.0.1
,也就是环回适配器(这里多)。这意味着“连接到我自己”。
在同一主机上运行两个应用程序(不使用 Docker)时,它们都可以在同一个适配器(也称为localhost
)上寻址。
在容器中运行这两个应用程序时,它们不像以前那样都在本地主机上。相反,您需要将web
容器指向docker0
适配器上的db
容器的 IP 地址 -docker-compose
为您设置。
改变:
127.0.0.1
到CONTAINER_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。这是系统(在本例中为容器)在尝试解析主机名时首先查看的位置。
更多推荐
所有评论(0)