Docker组合和postgres官方图像环境variables

其实我正在使用下面的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 

我也使用这个.env文件在docker-compose.yml文件的同一目录中:

 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 

并插入默认密码“密码”,它将我login,似乎忽略了环境variables。

我错过了什么?

来自docker的其他日志 – 组成日志:

 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”行。

我已经创build了docker-compose yml和.env文件,并提供了详细的信息,一切正常,从下面的图片可以看到:

在这里输入图像说明 在这里输入图像说明

我认为你的问题在于你传递了-h参数。

在容器内将永远是本地主机,但是,你将不得不通过:

 hostname: postgres 

在你的docker-compose文件里面,所以它会有posrtgres主机名