在 docker 文件中将 postgres 连接添加到 pgadmin

Adding postgress connections to pgadmin in docker file

有没有办法使用某些服务器连接预配置 pgadmin(可能通过环境变量)?

假设您有这个 docker-compose.yml,在此示例中类似于 PGADMIN_CONNECTIONS env 变量? (PGADMIN_CONNECTIONS 可能不是有效的 ENV 变量,这只是一个例子)

version: '3'
services:
  postgres:
    image: postgres
    hostname: postgres
    ports:
      - "5432:5432"
    environment:
      POSTGRES_USER: dbuser
      POSTGRES_PASSWORD: dbpass
      POSTGRES_DB: TEST_SM

  pgadmin:
    image: dpage/pgadmin4
    ports:
      - "80:80"
    environment:
      PGADMIN_DEFAULT_EMAIL: pgadmin4@pgadmin.org
      PGADMIN_DEFAULT_PASSWORD: admin

      ??PGADMIN_CONNECTIONS: dbuser:dbpass@postgres:5432

您需要定义一个 servers.json 文件来配置连接。它有很好的记录 here.

容器内的默认路径是/pgadmin4/servers.json。你可以 COPY 你自己版本的 server.json 文件到一个新构建的镜像中,或者当它是 运行.

时将文件绑定挂载到容器中

无法通过JSON将密码传递给pgadmin,但在下面的示例中引用了包含密码的文件。请参阅下文了解更多信息。

server.json 文件的示例结构如下:

{
  "Servers": {
    "1": {
      "Name": "pgadmin4@pgadmin.org",
      "Group": "Servers",
      "Host": "magic_db",
      "Port": 5432,
      "MaintenanceDB": "postgres",
      "Username": "postgres",
      "PassFile": "/pgpass",
      "SSLMode": "prefer"
    }
  }
}

/pgpass需要以下结构:

hostname:port:database:username:password

所以对于上面的例子,它将是:

magic_db:5432:postgres:postgres:secretpassword

注意:密码在较新版本的 pgadmin 中已更改为 PassFile,如 here

这个配置适合我:

  • postgres_db_data/
  • pgpass
  • servers.json
  • docker-compose.yaml
  1. 创建空目录调用postgres_db_data

  2. 使用以下内容创建“pgpass”

host.docker.internal:15432:postgres:postgres:postgres

  1. 使用以下内容创建“servers.json”
{
  "Servers": {
    "1": {
      "Name": "docker_postgres",
      "Group": "docker_postgres_group",
      "Host": "host.docker.internal",
      "Port": 15432,
      "MaintenanceDB": "postgres",
      "Username": "postgres",
      "PassFile": "/pgpass",
      "SSLMode": "prefer"
    }
  }
}
  1. 使用以下内容创建“docker-compose.yaml”
version: "3.9"
services:
  db:
    image: postgres
    volumes:
      - ./postgres_db_data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    ports:
      - "15432:5432"
  pgadmin:
     image: dpage/pgadmin4
     restart: always
     environment:
       PGADMIN_DEFAULT_EMAIL: pgadmin@pgadmin.com #the username to login to pgadmin
       PGADMIN_DEFAULT_PASSWORD: pgadmin # the password to login to pgadmin
     ports:
       - "5050:80"
     volumes:
       - ./servers.json:/pgadmin4/servers.json # preconfigured servers/connections
       - ./pgpass:/pgpass # passwords for the connections in this file
     depends_on:
       - "db"
  1. 运行 docker compose up

  2. 打开http://localhost:5050/browser/