我下载了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上运行。
为什么我收到此错误?这个角色存在,或者至少对我而言......
答案 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