无法在docker撰写服务之间连接到Postgres数据库

时间:2018-02-07 10:12:44

标签: node.js postgresql docker networking docker-compose

我正在尝试使用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访问网络服务,使用postico在localhost:1000

访问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)?我做错了什么?

2 个答案:

答案 0 :(得分:2)

对于您的web容器postgres,是在撰写为服务时定义的DNS名称。它通过docker internal DNS& amp;获取postgres DNS IP地址。网络,这就是它解决172.18.0.2的原因。如果你去web容器& ping postgres,您将获得相同的IP。

作为修复,配置您的节点服务以连接到端口postgres上的主机5432,因为它是容器端口。端口1000是主机端口,如果要使用端口1000,请配置节点服务以连接到MACHINE_IP:1000

PS - 容器内的Localhost表示容器本身&没别的。

答案 1 :(得分:0)

服务名称取自container_name-是固定的。在您的情况下,您没有该名称,并且名称是从docker-compose.yml为+ _ +服务名称+ _1的文件夹中创建的。 使用此DNS名称,您可以在docker-compose将创建的默认网络上从一个服务访问另一个服务。

谢谢