我下载了postgres:https://hub.docker.com/r/library/postgres/的docker容器,并执行了以下操作:
$ 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; 我的计划是在Django的docker上使用这个数据库,所以首先想检查我是否可以连接,但我不能。
$ 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上运行。
为什么我会得到这个错误?这个角色是存在的,或者至少在我看来...
发布于 2018-02-03 12:48:50
问题很简单,我的计算机已经在运行Postgres的一个实例,而我并不知道它仍然在:5432上运行(而不是在Docker内部),检查一下:
$ lsof -n -i:5432 | grep LISTEN所以我记得我是通过https://gist.github.com/sgnl/609557ebacd3378f3b72安装的,我运行
$ pg-stop然后我连接到Docker实例就没有问题了。
编辑(2019/07/02)
这个问题最近超过了10,000次点击量,所以我想我应该更详细地解释为什么会发生这种情况。
通常通过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上启动一个数据库。因为这一切都是在后台完成的,所以我没有想到这是问题所在,因为没有弹出任何常见的错误来通知端口正在使用,等等……
发布于 2018-10-12 17:35:10
在我的例子中,这个问题也可能是由于使用了一个不是postgres的超级用户。开发人员在georchestra docker组合中选择了用户地理乐团。从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 existhttps://stackoverflow.com/questions/48593016
复制相似问题