Postgresql Docker角色不存在

时间:2018-02-03 01:19:13

标签: database postgresql docker

我下载了postgres的docker容器:https://hub.docker.com/r/library/postgres/,并执行了以下操作:

$ docker run --name satgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
satgres | "docker-entrypoint.s…" | 5 seconds ago | Up 6 seconds | 0.0.0.0:5432->5432/tcp | satgres
$ docker exec -it c8f1b22cc41e /bin/bash        
# psql -U postgres
psql (10.1)
postgres=# CREATE DATABASE mytest;
postgres=# \password postgres
postgres=# CREATE ROLE ming WITH LOGIN PASSWORD 'pass1234';
postgres=# ALTER ROLE ming CREATEDB;
postgres=# CREATE DATABASE sjk;
postgres=# GRANT ALL PRIVILEGES ON DATABASE youtube TO ming;
postgres=# \connect sjk
youtube=# ALTER ROLE ming lOGIN;  

我的计划是在Docker上使用这个数据库与Django,所以首先要检查我可以连接,但我不能。

$ psql -h localhost -p 5432 -U postgres
$ psql: FATAL:  role "postgres" does not exist
$ psql -h localhost -p 5432 -U ming
$ psql: FATAL:  role "ming" does not exist

我对PSequal.app做同样的事,说同样的话, 我在Mac High Sierra上运行。

为什么我收到此错误?这个角色存在,或者至少对我而言......

2 个答案:

答案 0 :(得分:21)

问题很简单,我的计算机已经在:5432上运行了一个我不知道仍在运行的Postgres实例(不在Docker中),检查时使用:

$ lsof -n -i:5432 | grep LISTEN

所以我记得我是通过https://gist.github.com/sgnl/609557ebacd3378f3b72安装的,我跑了

$ pg-stop

然后我连接到Docker实例没有问题。

答案 1 :(得分:0)

就我而言,问题可能还在于使用了不是postgres的超级用户。开发人员在geOrchestra泊坞窗组成中选择了用户georchestra。 从dockerfile中提取:

environment:
  - POSTGRES_USER=georchestra

HEALTHCHECK --interval=30s --timeout=30s \
  CMD pg_isready -U $POSTGRES_USER

因此,您将必须使用选项“ -U georchestra”连接到容器。

$ docker exec -it docker_database_1 psql -U georchestra
psql (10.5 (Debian 10.5-1.pgdg90+1))
Type "help" for help.

当然,尝试与用户postgres连接会导致错误:

docker exec -it docker_database_1 psql -U postgres
psql: FATAL:  role "postgres" does not exist