我正在尝试使用docker compose连接postgresdb服务和nodejs web服务。
我的docker-compose.yml文件
version: "3"
services:
web:
build: ./
ports:
- "40000:3000"
depends_on:
- postgres
postgres:
image: kartoza/postgis:9.6-2.4
restart: always
volumes:
- postgresdata:/data/db
environment:
- POSTGRES_PASS=password
- POSTGRES_DBNAME=sticki
- POSTGRES_USER=renga
- ALLOW_IP_RANGE=0.0.0.0/0
ports:
- "1000:5432"
volumes:
postgresdata: 因此,当我在根目录中执行docker-compose up时,两个服务都在运行,并且我可以使用localhost:40000访问web服务,使用localhost:1000上的postico访问postgres服务
但在Node Web服务中,我编写了使用Sequelize访问postgres的代码
const sequelize = new Sequelize('sticki', 'renga', 'password', {
host: 'postgres',
dialect: 'postgres',
});但是我得到了以下错误
SequelizeConnectionRefusedError: connect ECONNREFUSED 172.18.0.2:1000为什么postgres连接到172.18.0.2而不是localhost(0.0.0.0)?我做错了什么?
发布于 2018-02-07 18:19:29
对于您的web容器,postgres是在compose as a service中定义的DNS名。它通过docker内部DNS和网络获取postgres DNS IP地址,这就是为什么它解析为172.18.0.2。如果你去web容器& ping postgres,你会得到相同的IP。
作为修复,配置您的节点服务以连接到端口5432上的主机postgres,因为它是容器端口。端口1000是主机端口,如果您想使用端口1000,请配置节点服务连接到您的MACHINE_IP:1000。
容器中的PS - Localhost指的是容器本身&没有其他含义。
发布于 2018-12-17 19:54:32
服务名称取自container_name -这是固定的。在您的情况下,您没有该名称,名称是从docker-compose.yml是+_+服务名称+ _1的文件夹创建的。使用此DNS名称,您可以在docker-compose将创建的默认网络上访问您的服务,从一个服务访问另一个服务。
谢谢
https://stackoverflow.com/questions/48661104
复制相似问题