Docker dpage/pgadmin4 error: specified user does not exist
Docker dpage/pgadmin4 error: specified user does not exist
这是 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 都会启动,我可以通过 localhost:8001
访问 pgAdmin4 网站。
但是,输入凭据后,我得到以下响应:
Specified user does not exist
为什么指定的用户不存在,我应该如何更改我的环境才能登录?
通过 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 上的登录工作正常。
将 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
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 # <-- !!!!!
删除/var/lib/pgadmin/pgadmin4.db
(它可能安装到某个地方)或尝试在容器内删除它并再次运行。
您的问题很可能是因为您启动了容器,然后更改了 PGADMIN_DEFAULT_EMAIL
和 PGADMIN_DEFAULT_PASSWORD
。
您的容器启动时有一段代码
if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
当容器第一次启动时,它会创建一个名为/var/lib/pgadmin/pgadmin4.db
的文件。 PGADMIN_DEFAULT_EMAIL
和 PGADMIN_DEFAULT_PASSWORD
将存储在 pgadmin4.db
中(密码经过哈希处理)。
所以,当容器再次启动时,pgadmin4.db
文件已经创建,不会去上面代码段中的分支,这样PGADMIN_DEFAULT_EMAIL
和PGADMIN_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+'
这是 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 都会启动,我可以通过 localhost:8001
访问 pgAdmin4 网站。
但是,输入凭据后,我得到以下响应:
Specified user does not exist
为什么指定的用户不存在,我应该如何更改我的环境才能登录?
通过 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 上的登录工作正常。
将 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
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 # <-- !!!!!
删除/var/lib/pgadmin/pgadmin4.db
(它可能安装到某个地方)或尝试在容器内删除它并再次运行。
您的问题很可能是因为您启动了容器,然后更改了 PGADMIN_DEFAULT_EMAIL
和 PGADMIN_DEFAULT_PASSWORD
。
您的容器启动时有一段代码
if [ ! -f /var/lib/pgadmin/pgadmin4.db ]; then
当容器第一次启动时,它会创建一个名为/var/lib/pgadmin/pgadmin4.db
的文件。 PGADMIN_DEFAULT_EMAIL
和 PGADMIN_DEFAULT_PASSWORD
将存储在 pgadmin4.db
中(密码经过哈希处理)。
所以,当容器再次启动时,pgadmin4.db
文件已经创建,不会去上面代码段中的分支,这样PGADMIN_DEFAULT_EMAIL
和PGADMIN_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+'