【问题标题】:Docker dpage/pgadmin4 error: specified user does not existDocker dpage/pgadmin4 错误:指定的用户不存在
【发布时间】:2020-03-30 00:27:46
【问题描述】:

这是docker-compose.yml 文件:

version: '3'

services:
############################
# Setup database container #
############################
  postgres_db:
    image: postgres
    restart: always
    ports:
      - ${POSTGRES_PORT}:${POSTGRES_PORT}
    environment: 
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - PGDATA=/var/lib/postgresql/data/pgdata
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - ./data:/var/lib/postgresql/data 
    networks:
      - db_network

  pgadmin:
    image: dpage/pgadmin4:4.19
    restart: always
    ports:
      - 8001:8080/tcp
    environment: 
      - PGADMIN_LISTEN_ADDRESS=0.0.0.0
      - PGADMIN_LISTEN_PORT=8080
      - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
      - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
    networks:
      - db_network

networks: 
  db_network:
    driver: bridge

同一目录下有一个.env文件。

# The above refers to the name of the postgres container since using docker-compose
# This is because docker-compose creates a user-defined network. Kubernetes also does this.
POSTGRES_PORT=5432
POSTGRES_USER=website
POSTGRES_PASSWORD=website
POSTGRES_DB=wikifakes_main
PGADMIN_DEFAULT_EMAIL=info@my-website.com
PGADMIN_DEFAULT_PASSWORD=my-secure-password 

执行docker-compose up --build 时,docker start 和我都可以通过localhost:8001 访问pgAdmin4 网站。 但是,输入凭据后,我得到以下响应:

指定的用户不存在

为什么指定的用户不存在,我应该如何更改我的环境以便我可以登录?

通过docker run --rm -e PGADMIN_DEFAULT_EMAIL="info@my-website.com" -e PGADMIN_DEFAULT_PASSWORD="my-secure-password" -p 8001:80 dpage/pgadmin4 创建的pgadmin4 docker 上的登录工作正常。

【问题讨论】:

    标签: postgresql docker docker-compose pgadmin pgadmin-4


    【解决方案1】:

    tty: true 添加到docker-compose.yml 文件中的pgadmin 服务。

    
      pgadmin:
        image: dpage/pgadmin4:4.19
        restart: always
        ports:
          - 8001:8080/tcp
        environment: 
          - PGADMIN_LISTEN_ADDRESS=0.0.0.0
          - PGADMIN_LISTEN_PORT=8080
          - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
          - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
        networks:
          - db_network
        # ADD THIS LINE
        tty: true
    

    所以完整的文件如下所示:

    version: '3'
    
    services:
    ############################
    # Setup database container #
    ############################
      postgres_db:
        image: postgres
        restart: always
        ports:
          - ${POSTGRES_PORT}:${POSTGRES_PORT}
        environment: 
          - POSTGRES_USER=${POSTGRES_USER}
          - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
          - PGDATA=/var/lib/postgresql/data/pgdata
          - POSTGRES_DB=${POSTGRES_DB}
        volumes:
          - ./data:/var/lib/postgresql/data 
        networks:
          - db_network
    
      pgadmin:
        image: dpage/pgadmin4:4.19
        restart: always
        ports:
          - 8001:8080/tcp
        environment: 
          - PGADMIN_LISTEN_ADDRESS=0.0.0.0
          - PGADMIN_LISTEN_PORT=8080
          - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
          - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
        networks:
          - db_network
        # ADD THIS LINE, TO BE ABLE TO LOGIN
        tty: true
    
    networks: 
      db_network:
        driver: bridge
    

    【讨论】:

    • 我已经尝试过这个解决方案,但我仍然收到消息“指定的用户不存在”。我复制了上面的代码。
    • 你的 .env 文件和 docker compose 文件在同一个文件夹吗?
    • 我再次验证,现在可以使用了。也许这是我的工作站配置有问题。简而言之,它有效!
    • 这对我没有任何影响,但我的用户名不是有效的电子邮件字符串,更改后它可以工作。
    【解决方案2】:

    删除/var/lib/pgadmin/pgadmin4.db(它可能被挂载到某个地方)或尝试在容器内删除它并再次运行。

    您的问题很可能是因为您曾经启动过容器,然后您更改了PGADMIN_DEFAULT_EMAILPGADMIN_DEFAULT_PASSWORD

    你的容器启动时有一个代码sn-p

    if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
    

    当容器第一次启动时,它会创建一个名为/var/lib/pgadmin/pgadmin4.db的文件。 PGADMIN_DEFAULT_EMAILPGADMIN_DEFAULT_PASSWORD 将存储在 pgadmin4.db 中(密码经过哈希处理)。

    所以,当容器再次启动时,pgadmin4.db文件已经创建,不会去上面代码sn-p中的分支,所以PGADMIN_DEFAULT_EMAILPGADMIN_DEFAULT_PASSWORD的变化不会被更新。


    或者,您可以执行 shell 到容器

    [user:host ~]$ docker exec -it <your container> sh
    

    并检查注册的电子邮件

    [pgadmin:<container_id> /pgadmin4]$ cat /var/lib/pgadmin/pgadmin4.db | egrep '\S+@\S+\.\S+'
    

    【讨论】:

      【解决方案3】:

      tty 不是必需的,但您需要提及依赖项(depends_on 和链接)!

      version: '3.1'
      
      services:
      ############################
      # Setup database container #
      ############################
        postgres_db:
          image: postgres
          restart: always
          ports:
            - ${POSTGRES_PORT}:${POSTGRES_PORT}
          environment: 
            - POSTGRES_USER=${POSTGRES_USER}
            - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
            - PGDATA=/var/lib/postgresql/data/pgdata
            - POSTGRES_DB=${POSTGRES_DB}
          volumes:
            - ./data:/var/lib/postgresql/data 
          networks:
            - db_network
      
        pgadmin:
          image: dpage/pgadmin4:4.19
          restart: always
          ports:
            - 8001:8080/tcp
          environment: 
            - PGADMIN_LISTEN_ADDRESS=0.0.0.0
            - PGADMIN_LISTEN_PORT=8080
            - PGADMIN_DEFAULT_EMAIL=${PGADMIN_DEFAULT_EMAIL}
            - PGADMIN_DEFAULT_PASSWORD=${PGADMIN_DEFAULT_PASSWORD}
          networks:
            - db_network
          # ADD THIS LINE, TO BE ABLE TO LOGIN
          tty: true
          depends_on: # <-- !!!!!
            - postgres_db # <-- !!!!!
          links: # <-- !!!!!
            - postgres_db # <-- !!!!!
      

      【讨论】:

      • 如果我不需要 postgres_db 容器怎么办。我已经有一个正在运行的数据库。我只需要一个pgAdmin。我可以运行它,但即使我传递了变量也无法登录到 gui。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-27
      • 2016-11-16
      • 2019-01-04
      • 1970-01-01
      • 2020-09-19
      • 2021-02-01
      相关资源
      最近更新 更多