其实我使用以下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
并输入默认密码"密码",它会让我登录,并且似乎忽略了环境变量。
我错过了什么?
来自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"关于用户,数据库和密码设置的一行。
答案 0 :(得分:1)
我创建了一个docker-compose yml和.env文件,其中包含您提供的详细信息,一切正常,如下图所示:
我认为您的问题在于传递 -h 参数。
容器内部始终是 localhost 但是,在外面你必须通过:
public ArrayList<ModelTura_spieler> getAllTura_spieler() {
SQLiteDatabase db = this.getReadableDatabase();
final ArrayList<ModelTura_spieler> tura_spielerList = new ArrayList<ModelTura_spieler>();
String selectQuery = "SELECT * FROM tura_spieler";
final Cursor c = db.rawQuery(selectQuery, null);
for(c.moveToFirst(); c.getPosition()!=getTura_spielerCount()-1 ; c.moveToNext()){
ModelTura_spieler tura_spieler = getModelTura_spielerFromCursor(c);
tura_spielerList.add(tura_spieler);
}
return tura_spielerList;
}
在docker-compose文件中,因此它将具有posrtgres主机名
答案 1 :(得分:0)
根据https://hub.docker.com/_/postgres文档。
警告:仅当您使用空的数据目录启动容器时,特定于Docker的变量才有效。容器启动时,所有现有数据库都将保持不变。