Postgresql Docker角色不存在

fv2wmkja  于 2023-01-29  发布在  Docker
关注(0)|答案(3)|浏览(152)

我为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

我对www.example.com做了同样的PSequal.app事情,说了同样的话,我在Mac高塞拉上运行。
为什么我会得到这个错误?角色存在,或者至少在我看来...

slhcrj9b

slhcrj9b1#

问题很简单,我的计算机已经在运行一个Postgres示例,我不知道它还在:5432上运行(不在Docker内部),检查:

$ lsof -n -i:5432 | grep LISTEN

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

$ pg-stop

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

编辑(2019年7月2日)

这个问题最近通过了1万次浏览,所以我想我应该更详细地说明为什么会发生这种情况。
通常通过docker运行,使用python并连接到postgres数据库需要您通过pip3 install psycopg2安装psycopg2,但如果您运行此命令,您将获得:

Error: pg_config executable not found.

这是因为psycopg2需要操作系统安装postgres库:

yum install postgresql-devel
apt-get install postgresql-client

现在,在Mac上,您需要对brew执行相同的操作:

brew install postgresql

有一件事我没有意识到,是在Mac上,做上述操作不仅会安装所需的库,而且启动:5432上的数据库。因为这一切都是在后台完成的,所以我没有想到这是问题所在,因为没有常见的错误弹出通知端口正在使用等。

mnemlml8

mnemlml82#

在我的例子中,这个问题也可能是由于使用了一个不是postgres的超级用户。开发人员在geOrchestra docker组合中选择了用户georchestra。

environment:
  - POSTGRES_USER=georchestra

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

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

$ 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
llycmphe

llycmphe3#

在我的例子中,这个命令帮助我:

docker-compose down --volumes

相关问题