当该文件作为卷挂载时,pgadmin4 docker 容器中的 pgpass 文件在哪里

问题描述

我正在使用以下图像 https://hub.docker.com/r/dpage/pgadmin4/ 在 Ubuntu 18-04 上设置 pgAdmin4。

我已经挂载了一个包含 pgpass 文件的卷(对于容器内的 chmod 用户也是 pgadmin),正如您在我的 Compose 文件中看到的:

version: '3.8'
services:
  pgadmin4:
    image: dpage/pgadmin4
    container_name: pgadmin4
    environment:
      - PGADMIN_DEFAULT_EMAIL=me@localhost
      - PGADMIN_DEFAULT_PASSWORD=******************
      - PGADMIN_LISTEN_PORT=5050
      - PGADMIN_SERVER_JSON_FILE=servers.json
    volumes:
      - ./config/servers.json:/pgadmin4/servers.json # <-- this file is well taken into account
      - ./config/pgpass:/pgpass # <- there is no way to find this one on the other hand
    ports:
      - "5000:5000"
    restart: unless-stopped
    network_mode: host

但是当我右键单击服务器并检查其高级属性时,它似乎无法从 pgadmin 网页中识别出来:

no pgpass file in pgadmin interface

如果我在图像中只有斜线的顶部绿色框中手动指定 /pgpass,它会说:

pgpass not found

但是如果我登录到容器中,我实际上可以列出该文件

/ $ ls -larth /pgpass
-rw-------    1 pgadmin  pgadmin      574 Mar 10 22:37 /pgpass

我做错了什么?
如何让应用程序识别 pgpass 文件

解决方法

这里的问题似乎是 '/' 文件中的 servers.json 并不意味着文件系统中的 '/',而是与配置中设置的 STORAGE_DIR 相关的东西。实际上,为每个用户创建了一个单独的存储目录,因此对于您的用户 me@localhost,您必须将 ./config/pgpass 挂载到 /var/lib/pgadmin4/storage/me_localhost/pgpass,但仍将其称为 /pgpass在您的servers.json中。