it-swarm.com.de

Postgresql Docker-Rolle ist nicht vorhanden

Ich habe den Docker-Container für postgres heruntergeladen: https://hub.docker.com/r/library/postgres/ und habe Folgendes getan:

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

Mein Plan ist, diese Datenbank auf Docker mit Django zu verwenden, also möchte ich zuerst prüfen, ob ich eine Verbindung herstellen kann, aber ich kann nicht.

$ 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

Ich mache dasselbe mit PSequal.app, sagt dasselbe, Ich laufe auf Mac High Sierra. 

Warum erhalte ich diesen Fehler? Die Rolle existiert oder zumindest scheint es mir ...

6
jupiar

Das Problem war so einfach, dass auf meinem Computer bereits eine Postgres-Instanz ausgeführt wurde, von der ich nicht wusste, dass sie noch immer (nicht in Docker) auf :5432 ausgeführt wurde.

$ lsof -n -i:5432 | grep LISTEN

Also fiel mir ein, dass ich es über https://Gist.github.com/sgnl/609557ebacd3378f3b72 installiert habe

$ pg-stop

Und dann hatte ich kein Problem mit der Docker-Instanz zu verbinden.

18
jupiar

In meinem Fall kann das Problem auch auf die Verwendung eines Superbenutzers zurückzuführen sein, der kein Postgres ist. Die Entwickler wählten den Benutzer georchestra in der geOrchestra-Docker-Komposition . Auszug aus der Docker-Datei:

environment:
  - POSTGRES_USER=georchestra

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

daher müssen Sie die Option "-U georchestra" verwenden, um eine Verbindung zum Container herzustellen.

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

und der Versuch, sich mit den Benutzer postgres zu verbinden, verursacht natürlich einen Fehler:

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