我正在尝试使用psql访问PostgreSQL的shell(docker-compose),但是遇到了一些困难...这是我的docker-compose文件:

main:
  build: .
  volumes:
    - .:/code
  links:
    - postgresdb
  environment:
    - DEBUG=true


postgresdb:
  build: utils/sql/
  ports:
    - "5432"
  environment:
    - DEBUG=true

我尝试通过运行psqlmain服务来访问postgresdbdocker-compose run postgresdb psql -h postgresdb -U docker mydatabase
但是我得到的只是psql: could not translate host name "postgresdb" to address: Name or service not known ...,我不明白,因为我在数据库配置文件中使用postgresdb作为主机,例如:
DB_ACCESS = {
    'drivername': 'postgres',
    # Name of docker-compose service
    'host': 'postgresdb',
    'port': '5432',
    'username': 'docker',
    'password': '',
    'database': 'mydatabase'
}

最佳答案

您正在尝试从自身连接Postgresdb容器,但是容器不知道您在postgresdb容器内设置的别名main的信息。

考虑以下示例:

$ docker run -it --rm ubuntu hostname --fqdn
817450b29b34

现在您看到Postgresdb不知道如何解析postgresdb。但是无论如何,postgresdb应该可以从main解析。

您有几个机会可以解决此问题:
  • 尝试为Postgresdb显式设置主机名(在docker-compose.yml中);
  • 以这种方式从main容器访问Postgresdb:
    $ docker exec -it main_container_full_name psql -h postgresdb -U docker mydatabase
    
  • 08-28 08:02