【发布时间】:2017-10-15 08:51:48
【问题描述】:
其实我用的是下面的 docker-compose.yml 文件
version: '3.3'
services:
postgres:
container_name: postgres
image: postgres:latest
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
PGDATA: /var/lib/postgresql/data/pgdata
ports:
- "5432:5432"
volumes:
- ./data/postgres/pgdata:/var/lib/postgresql/data/pgdata
我也在 docker-compose.yml 文件的同一目录中使用这个 .env 文件:
POSTGRES_USER=dbadm
POSTGRES_PASSWORD=dbpwd
POSTGRES_DB=db
然后我以这种方式将 bash shell 运行到容器中:
docker exec -ti postgres bash
然后调用命令:
psql -h postgres -U dbadm db
我得到了错误:
psql: FATAL: password authentication failed for user "dbadm"
奇怪的是,如果使用默认图像参数:
psql -h postgres -U admin database
并插入默认密码“password”,它让我登录,似乎忽略了环境变量。
我错过了什么?
来自 docker-compose up 日志的其他日志:
postgres | 2017-10-15 09:19:15.502 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
postgres | 2017-10-15 09:19:15.502 UTC [1] LOG: listening on IPv6 address "::", port 5432
postgres | 2017-10-15 09:19:15.505 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres | 2017-10-15 09:19:15.524 UTC [22] LOG: database system was shut down at 2017-10-15 09:02:21 UTC
postgres | 2017-10-15 09:19:15.530 UTC [1] LOG: database system is ready to accept connections
看不到任何关于用户、数据库和密码设置的“RUN”行。
【问题讨论】:
-
这很令人困惑,您尝试以 dbadm 身份登录,但它不起作用,但您说您可以以管理员身份登录。您是否尝试过在 .env 文件中使用管理员用户?
-
感谢@Sergiu 的关注,因为我说它可以使用图像中的默认值,但这不是我的问题。
-
你能运行这个环境吗?在你的 postgres 容器中 grep POSTGR?
-
您是否尝试直接指定值(POSTGRES_USER: dbadm 等)?不确定,但也许您还需要将
env_file: .env添加到您的配置中,如文档中所述:docs.docker.com/compose/compose-file/#env_file -
要尝试的另一件事:将
environment部分向前移动,将其置于postgres之下,而不是将其置于services级别。
标签: postgresql docker docker-compose psql