实际上,我正在使用以下的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:
然后我通过以下方式在容器中运行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 logs的额外日志:
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”行。
env_file: .env
:https://docs.docker.com/compose/compose-file/#env_file - Borys Serebrovenvironment
部分向前移动,放置在postgres
下面,而不是在services
级别上。 - Borys Serebrov