2017-10-15 10 views
1

En fait, je suis en utilisant le fichier docker-compose.yml suivantDocker composer et postgres les variables d'environnement image officielle

version: '3.3' 

    services: 
    postgres: 
     container_name: postgres 
     image: postgres:latest 
     restart: always 
     environment: 
     POSTGRES_USER: ${POSTGRES_USER} 
     POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} 
     POSTGRES_DB: ${POSTGRES_DB} 
     PGDATA: /var/lib/postgresql/data/pgdata 
     ports: 
     - "5432:5432" 
     volumes: 
     - ./data/postgres/pgdata:/var/lib/postgresql/data/pgdata 

J'utilise également ce fichier .env dans le même répertoire du fichier docker-compose.yml :

POSTGRES_USER=dbadm 
POSTGRES_PASSWORD=dbpwd 
POSTGRES_DB=db 

Puis je lance un shell bash dans un récipient de cette façon:

docker exec -ti postgres bash 

Et après cette Invo ke la commande:

psql -h postgres -U dbadm db 

Et je reçois l'erreur:

psql: FATAL: password authentication failed for user "dbadm" 

Le fait étrange est que si l'on utilise les paramètres d'image par défaut:

psql -h postgres -U admin database 

et insérez le mot de passe par défaut « Mot de passe ", il me connecte, et semble ignorer les variables d'environnement.

Qu'est-ce qui me manque?

journaux supplémentaires de journaux docker-Compose jusqu'à:

postgres | 2017-10-15 09:19:15.502 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432 
postgres | 2017-10-15 09:19:15.502 UTC [1] LOG: listening on IPv6 address "::", port 5432 
postgres | 2017-10-15 09:19:15.505 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432" 
postgres | 2017-10-15 09:19:15.524 UTC [22] LOG: database system was shut down at 2017-10-15 09:02:21 UTC 
postgres | 2017-10-15 09:19:15.530 UTC [1] LOG: database system is ready to accept connections 

ne vois pas la ligne "RUN" sur l'utilisateur, base de données et la configuration du mot de passe.

+0

Il est source de confusion, vous essayez de vous connecter en tant que dbadm et cela ne fonctionne pas, mais vous dites que vous pouvez vous connecter en tant qu'administrateur. Avez-vous essayé d'utiliser l'utilisateur admin dans votre fichier .env? – Sergiu

+0

Merci pour l'intérêt @Sergiu comme je l'ai dit, il fonctionne en utilisant les valeurs par défaut de l'image, mais ce n'est pas mon problème. – zioMitch

+0

Pourriez-vous s'il vous plaît exécuter ce env | grep POSTGR dans votre conteneur postgres? – Sergiu

Répondre

0

J'ai créé un docker-Compose YML et .env fichier avec les détails que vous avez fourni et tout fonctionne bien comme vous pouvez le voir sur les photos ci-dessous:

enter image description here enter image description here

Je pense que votre Le problème se situe lorsque vous passez le paramètre -h.

A l'intérieur du conteneur sera toujours localhost cependant, en dehors, vous devrez passer:

hostname: postgres 

dans votre fichier docker-Compose il aura le nom d'hôte posrtgres

+0

variable en utilisant localhost permet des connexions locales et sauter totalement l'utilisateur créé. Le problème est sur la façon dont je monte le répertoire pour les données. @sergiu – zioMitch

+0

Oui, vous n'utilisez que des connexions locales. Cependant, dans votre fichier/etc/hosts, vous devrez ajouter le conteneur IP et postgres, comme suit: 0.0.0.0 postgres puis essayez de vous connecter – Sergiu

+0

Bien, il semble que la configuration de la variable d'environnement PGDATA crée un volume dans lequel postgres stocke les binaires db et les fichiers de configuration (également les accès). Ensuite, je monte un volume que je veux être sur l'hôte pour plus de simplicité lors du développement local. Mais le montage du volume remplacera tout ce qu'il semble. Ai-je tort? – zioMitch