web-dev-qa-db-fra.com

Le rôle du docker Postgresql n'existe pas

J'ai téléchargé le conteneur docker pour postgres: https://hub.docker.com/r/library/postgres/ et procédez comme suit:

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

Mon plan est d’utiliser cette base de données sur docker avec Django, donc d’abord, vérifiez si je peux me connecter, mais je ne peux pas.

$ 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

Je fais la même chose avec PSequal.app, dit la même chose, Je tourne sous Mac High Sierra. 

Pourquoi est-ce que je reçois cette erreur? Le rôle existe, ou du moins me semble-t-il ...

6
jupiar

Le problème était assez simple: mon ordinateur exécutait déjà une instance de Postgres dont je ne savais pas qu'elle était toujours en cours d'exécution (pas dans Docker) sur :5432, vérifiée avec:

$ lsof -n -i:5432 | grep LISTEN

Je me suis donc rappelé que je l'avais installé via https://Gist.github.com/sgnl/609557ebacd3378f3b72 , j'ai couru

$ pg-stop

Et puis je n’ai eu aucun problème pour me connecter à l’instance Docker.

18
jupiar

Dans mon cas, le problème peut aussi être dû à l'utilisation d'un super utilisateur qui n'est pas postgres. Les développeurs ont choisi l'utilisateur georchestra dans la composition du docker de geOrchestra ..___

environment:
  - POSTGRES_USER=georchestra

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

par conséquent, vous devrez utiliser l'option "-U georchestra" pour vous connecter au conteneur.

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

et bien sûr, essayer de se connecter avec l'utilisateur postgres provoque une erreur:

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