【问题标题】:Adding postgress connections to pgadmin in docker file在 docker 文件中添加到 pgadmin 的 postgres 连接
【发布时间】:2020-10-31 09:52:32
【问题描述】:

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

假设你有这个 docker-compose.yml,在这个例子中类似于 PGADMIN_CONNECTIONS 环境变量? (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

【问题讨论】:

标签: docker pgadmin pgadmin-4


【解决方案1】:

您需要定义一个 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 所示。

【讨论】:

  • 它在 pgadmin docker 文件中的记录不是很好,因为它不包含您的答案中实际需要的信息,例如 json 文件的结构。对于阅读此 Jay 在 passfile 上的第二个链接的其他人,还包含 server.json 文件可用的所有属性的完整示例。谢谢杰。
  • 这似乎只适用于默认的 pgadmin 用户。这些服务器不会为其他用户显示。所以,我尝试使用“共享”标志,它对所有用户可见,但它没有预先填充用户名和密码。每个用户必须再次手动提供用户名和密码文件
【解决方案2】:

这个配置对我有用:

  • 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/

【讨论】:

  • 我在 pgadmin 界面中尝试打开服务器时收到 fe_sendauth: no password supplied。从我读到的可能是因为 pgpass 文件的权限,但因为我在 Windows 上,我不知道如何解决这个问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2014-10-21
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 1970-01-01
相关资源
最近更新 更多