从另一个 运行 容器连接到 postgres 容器

Connect to postgres container from another running container

我正在努力从另一个容器连接到带有 postgres 数据库的 运行 容器。我可以在 运行 本地连接,但我怀疑在尝试从另一个容器连接时我忽略了一些网络问题。我目前看到的具体错误是 psycopg2.OperationalError: could not translate host name "my_network" to address: Temporary failure in name resolution

这是我的 docker-撰写:

version: '3'                                                                                       
services:                                                                                          
  data_collection:                                                                                 
    build: ./docker/data_collection                                                                
    ports:                                                                                         
      - "8888:8888"                                                                                
      - "6006:6006"                                                                                
      - "8000:8000"                                                                                                           
    networks:                                                                                      
      - my_network                                                                                 
    depends_on:                                                                                    
      - db                                                                                         
  db:                                                                                              
    image: 'postgres:13.2-alpine'                                                                  
    ports: 
      - "5432:5432"
    environment:
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=mypassword
      - POSTGRES_DB=spotify
    volumes:
      - db-data:/var/lib/postgresql/data # persist data even if container shuts down               
    networks:
      - my_network                                                                                 
                                                                                                   volumes:                                                                                           
  db-data: # names volumes can be managed easier using docker-compose                                                                                                                                 
networks:                                                                                          
  my_network:                                                                                      
~              

然后我在我的 data_colleciton 容器中输入一个 shell 并尝试通过将这些参数读入变量 params 来进行连接,它像这样传入:

import psycopg2

params = dict(host='my_network', database='spotify', user='postgres', password='mypassword', port='5432')
conn = psycopg2.connect(**params)

但是,运行 这在本地并将上面的主机替换为 localhost 确实可以按预期工作

host='my_network' 更改为 host='db'。您没有连接到网络,您正在连接到该网络中的特定主机。