簡體   English   中英

docker compose服務之間無法連接到Postgres db

[英]Cannot Connect to Postgres db between docker compose services

我正在嘗試使用docker compose將postgresdb服務與Node.js 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服務,並使用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 Connection建立為172.18.0.2而不是localhost(0.0.0.0)? 我做錯了什么?

對於您的web容器, postgres是在compose中定義為服務的DNS名稱。 它通過docker內部DNS和網絡獲取postgres DNS IP地址,這就是為什么它解析為172.18.0.2的原因。 如果您訪問web容器並ping postgres ,則將獲得相同的IP。

作為修復,將節點服務配置為在端口5432上連接到主機postgres ,因為它是容器端口。 端口1000是主機端口,如果要使用端口1000,請配置節點服務以連接到MACHINE_IP:1000

PS-容器中的Localhost表示容器本身,僅此而已。

服務名稱取自container_name-是固定的。 在您的情況下,您沒有該名稱,並且名稱是從docker-compose.yml為+ _ +服務名稱+ _1的文件夾中創建的。 使用此DNS名稱,您可以在docker-compose將創建的默認網絡上從一個服務訪問另一個服務。

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM