如何从 PGAdmin4 连接到 docker Postgres 服务器

How can I connect to docker Postgres server from PGAdmin4

我是 Docker 容器的新手,但不是 Postgres 的新手(我过去曾深入研究过)。

问题是我正在尝试连接到从以下 Docker 容器启动的 Postgres 服务器 dpage/pgadmin4

问题是我无法使用 PGAdmin4 连接到服务器。 我收到以下错误:

could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Address not available
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?

我有以下 yaml 文件:

version: '3'

services:
  db:
    image: postgres
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: parola
      PGDATA: /var/lib/postgresql/data/pgdata
      
  pgadmin4:
    image: dpage/pgadmin4
    ports:
      - "5050:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: user@domain.com
      PGADMIN_DEFAULT_PASSWORD: parola

使用psql命令行只有设置-h 0.0.0.0才能连接,如下:

psql -h 0.0.0.0 -U postgres

谁能告诉我我需要在 yaml 文件中设置什么,或者我如何配置才能允许来自 localhost/127.0.0.1 的连接?

我 运行 Ubuntu 20.04.2,AMD64 Docker 版本 20.10.7,构建 f0df350。

服务 pgadmin4 无法连接到服务 db 因为在 pgadmin4 内部的 5432 端口没有任何服务 运行ning

使用此配置,您仅将数据库映射到主机的 5432 端口。这就是为什么你能够 运行 psql -h 0.0.0.0 -U postgres 在你的机器(主机)

According to docker-compose pgadmin4 可以使用主机名访问数据库 db

你可以link配置一些额外的配置如下

version: '3'

services:
  db:
    image: postgres
    restart: always
    ports:
      - "5432"
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: parola
      PGDATA: /var/lib/postgresql/data/pgdata

  pgadmin4:
    image: dpage/pgadmin4
    ports:
      - "5050:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: user@domain.com
      PGADMIN_DEFAULT_PASSWORD: parola
    volumes:
    - ./servers.json:/pgadmin4/servers.json

add a file called servers.json in the same directory as docker-compose with the below contents。请注意,我已将主机添加为 db

{
  "Servers": {
    "1": {
      "Name": "local db",
      "Group": "Server Group 1",
      "Port": 5432,
      "Username": "postgres",
      "Host": "db",
      "SSLMode": "prefer",
      "MaintenanceDB": "postgres"
    }
  }
}