J'ai créé un conteneur postgres en utilisant le tutoriel sur le fig website . J'ai nommé le conteneur db.
Le conteneur est en cours d'exécution et mon application s'y connecte correctement. J'ai essayé d'exécuter la commande fig run db psql
avec le conteneur db en cours d'exécution et a obtenu l'erreur:
psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Comment accéder à l'interface psql
dans le conteneur en cours d'exécution db?
fig créera un conteneur docker avec un nom différent de celui utilisé dans le fig.yml
fichier.
Je l'ai fait fonctionner en trouvant le nom du conteneur avec docker ps
et en regardant la colonne [~ # ~] noms [~ # ~] .
Ensuite, exécutez la commande psql
dans le conteneur en cours d'exécution avec docker exec -ti NAME_OF_CONTAINER psql -U YOUR_POSTGRES_USERNAME
Notez que docker exec
exécute la commande psql
sur un conteneur en cours d'exécution, par opposition à docker run
qui lancera un nouveau conteneur.
fig est maintenant appelé docker-compose
Vous devez exécuter un nouveau conteneur pour vous connecter à celui démarré par la fig. Il en est ainsi parce que le conteneur principal par défaut démarre le service et si vous le faites fig run db psql
fig ne démarrera PAS le service mais exécutera le client psql à la place. Voir le Dockerfile .
Donc, pour vous connecter au service PostgreSQL, vous devez exécuter un autre conteneur lié à celui démarré par la fig. Voir https://registry.hub.docker.com/_/postgres/ .
Tout d'abord, puisque fig change le nom des conteneurs démarrés, vérifiez la colonne NOMS du docker ps
conteneur après avoir fait fig up
. Alors:
docker run -it --link <postgres_container_name>:postgres --rm postgres sh -c 'exec psql -h "$POSTGRES_PORT_5432_TCP_ADDR" -p "$POSTGRES_PORT_5432_TCP_PORT" -U postgres'
Vous pouvez faire le docker exec
astuce aussi bien que décrit par @sargas aussi, mais la manière de relier me semble plus canonique.
Pouvez-vous publier le résultat de docker ps
? Je suppose que vous devez spécifier le port que le conteneur postgres expose. Fonctionnement docker ps
devrait vous donner
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
948b1f6ebc0a my_postgres:latest "/usr/lib/postgresql 6 days ago Up 6 days 0.0.0.0:49155->5432/tcp db
et en regardant sous la colonne PORTS pour votre conteneur de base de données, vous verrez le port sur lequel la base de données est réellement exposée. Dans ce cas, c'est 49155, mais docker choisira un port aléatoire entre 49153 et 65535 s'il n'est pas explicitement spécifié au démarrage du conteneur. Vous devez fournir le -p
option sur psql pour cibler ce port en tant que tel
psql -p 49155 ...