首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当pgpass文件作为卷挂载时,pgadmin4 docker容器中的pgpass文件位于何处

当pgpass文件作为卷挂载时,pgadmin4 docker容器中的pgpass文件位于何处
EN

Stack Overflow用户
提问于 2021-03-11 16:04:45
回答 4查看 451关注 0票数 1

我使用下面的镜像https://hub.docker.com/r/dpage/pgadmin4/在Ubuntu18-04上设置pgAdmin4。

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

代码语言:javascript
复制
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网页中识别出来:

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

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

代码语言:javascript
复制
/ $ ls -larth /pgpass
-rw-------    1 pgadmin  pgadmin      574 Mar 10 22:37 /pgpass

我做错什么了?

如何让应用程序识别pgpass文件?

EN

回答 4

Stack Overflow用户

发布于 2021-09-20 17:45:35

以下配置适用于我:

  • pgpass
  • servers.json
  • docker-compose.yaml
  • dockerfile_for_pgadmin

pgpass

代码语言:javascript
复制
docker_postgres_db:5432:postgres:postgres:postgres

servers.json

代码语言:javascript
复制
{
  "Servers": {
    "1": {
      "Name": "docker_postgres",
      "Group": "docker_postgres_group",
      "Host": "docker_postgres_db",
      "Port": 5432,
      "MaintenanceDB": "postgres",
      "Username": "postgres",
      "PassFile": "/pgpass",
      "SSLMode": "prefer"
    }
  }
}

docker-compose.yaml

代码语言:javascript
复制
version: "3.9"
services:

  docker_postgres_db:
    image: postgres
    volumes:
      - ./postgres_db_data:/var/lib/postgresql/data # mkdir postgres_db_data before docker compose up
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    ports:
      - "15432:5432"


  pgadmin:
     build:
       context: .
       dockerfile: ./dockerfile_for_pgadmin
     environment:
       PGADMIN_DEFAULT_EMAIL: pgadmin@pgadmin.com
       PGADMIN_DEFAULT_PASSWORD: pgadmin
     ports:
       - "5050:80"
     volumes:
       - ./servers.json:/pgadmin4/servers.json # preconfigured servers/connections

dockerfile+for_pgadmin

代码语言:javascript
复制
FROM dpage/pgadmin4
USER pgadmin
RUN mkdir -p  /var/lib/pgadmin/storage/pgadmin_pgadmin.com
COPY ./pgpass /var/lib/pgadmin/storage/pgadmin_pgadmin.com/
USER root
RUN chown pgadmin:pgadmin /var/lib/pgadmin/storage/pgadmin_pgadmin.com/pgpass
RUN chmod 0600 /var/lib/pgadmin/storage/pgadmin_pgadmin.com/pgpass
USER pgadmin
ENTRYPOINT ["/entrypoint.sh"]
票数 3
EN

Stack Overflow用户

发布于 2021-11-19 20:37:08

pgAdmin 6.2上,PassFile指向容器内部的绝对路径,而不是STORAGE_DIR (/var/lib/pgadmin)下的路径。

在进入入口点阶段之前,只需要设置pgpass文件的所有者和权限。

docker-compose.yml

代码语言:javascript
复制
  pgadmin:
    image: dpage/pgadmin4:6.2
    entrypoint: >
      /bin/sh -c "
      cp -f /pgadmin4/pgpass /var/lib/pgadmin/;
      chmod 600 /var/lib/pgadmin/pgpass;
      chown pgadmin:pgadmin /var/lib/pgadmin/pgpass;
      /entrypoint.sh
      "
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL:-pgadmin4@pgadmin.org}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD:-admin}
      PGADMIN_CONFIG_SERVER_MODE: "False"
      PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: "False"
    volumes:
      - ./config/servers.json:/pgadmin4/servers.json
      - ./config/pgpass:/pgadmin4/pgpass
    ports:
      - "${PGADMIN_PORT:-5050}:80"

servers.json

代码语言:javascript
复制
{
  "Servers": {
    "1": {
      "Name": "pgadmin4@pgadmin.org",
      "Group": "Servers",
      "Host": "postgres",
      "Port": 5432,
      "MaintenanceDB": "postgres",
      "Username": "postgres",
      "SSLMode": "prefer",
      "PassFile": "/var/lib/pgadmin/pgpass"
    }
  }
}

pgpass

代码语言:javascript
复制
postgres:5432:postgres:postgres:Welcome01

更新:

更新了servers.json上docker-compose.yml和PassFile上的入口点,以实现跨平台的工作解决方案。

票数 3
EN

Stack Overflow用户

发布于 2021-10-07 05:27:38

我用下面的洞察力让它工作。

在servers.json中,当您指定:

代码语言:javascript
复制
"PassFile": "/pgpass"

这意味着路径中的/开始于用户的存储目录,即

代码语言:javascript
复制
pattern:

/var/lib/pgadmin/storage/<USERNAME>_<DOMAIN>/

example:

/var/lib/pgadmin/storage/postgres_acme.com/

这里有一个工作示例,它将所有内容复制到正确的位置,并正确设置烫发。

代码语言:javascript
复制
  pgadmin:
    image: dpage/pgadmin4
    restart: unless-stopped
    environment:
      PGADMIN_DEFAULT_EMAIL: postgres@acme.com
      PGADMIN_DEFAULT_PASSWORD: postgres
      PGADMIN_LISTEN_ADDRESS: '0.0.0.0'
      PGADMIN_LISTEN_PORT: 5050
    tty: true
    ports:
      - 5050:5050
    volumes:
      - ~/data/pgadmin_data:/var/lib/pgadmin
      - ./local-cloud/servers.json:/pgadmin4/servers.json # preconfigured servers/connections   
      - ./local-cloud/pgpass:/pgadmin4/pgpass # passwords for the connections in this file
    entrypoint: >
      /bin/sh -c "
      mkdir -m 700 /var/lib/pgadmin/storage/postgres_acme.com;
      chown -R pgadmin:pgadmin /var/lib/pgadmin/storage/postgres_acme.com;
      cp -prv /pgadmin4/pgpass /var/lib/pgadmin/storage/postgres_acme.com/;
      chmod 600 /var/lib/pgadmin/storage/postgres_acme.com/pgpass;
      /entrypoint.sh
      " 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66578506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档