540 votes

Connexion à Postgresql dans un conteneur docker depuis l'extérieur

J'ai Postgresql sur un serveur dans un conteneur docker. Comment puis-je m'y connecter depuis l'extérieur, c'est-à-dire depuis mon ordinateur local ? Quel paramètre dois-je appliquer pour permettre cela ?

1 votes

Quelle commande avez-vous utilisé pour démarrer postresql ? vous êtes capable d'exposer un port et de le mapper

1 votes

679voto

lvthillo Points 8424

Vous pouvez exécuter Postgres de cette façon (mapper un port) :

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

Vous avez donc mappé le port 5432 de votre conteneur au port 5432 de votre serveur. -p <host_port>:<container_port> Ainsi, votre postgres est maintenant accessible à partir de votre site Web. public-server-ip:5432

Pour tester : Exécutez la base de données postgres (commande ci-dessus)

docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                     NAMES
05b3a3471f6f        postgres            "/docker-entrypoint.s"   1 seconds ago       Up 1 seconds        0.0.0.0:5432->5432/tcp    some-postgres

Allez dans votre conteneur et créez une base de données :

docker exec -it 05b3a3471f6f bash
root@05b3a3471f6f:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q

Allez sur votre localhost (où vous avez un outil ou le client psql).

psql -h public-ip-server -p 5432 -U postgres

(mot de passe monmotdepassesecret)

postgres=# \l

                             List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges
-----------+----------+----------+------------+------------+-----------------------
 mytest    | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 |
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres   

Vous accédez donc à la base de données (qui est exécutée dans Docker sur un serveur) depuis votre hôte local.

Sur ce poste il est expliqué en détail.

1 votes

@Tjorriemorrie Vous êtes sûr que votre postgres est exécuté sur votre machine locale ? Essayez peut-être 127.0.0.1 au lieu de localhost mais pour l'instant ça fonctionne.

12 votes

Obtenez votre adresse IP publique (osx) : ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1

13 votes

De tous les messages relatifs à Postgres/Docker que j'ai trouvés, celui-ci est l'un des plus utiles. Je vous remercie.

200voto

Thomas Webber Points 568

J'ai réussi à le faire fonctionner sous linux

  1. Exécutez le docker postgres - assurez-vous que le port est publié, j'utilise alpine parce que c'est léger.

    docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
  2. en utilisant un autre terminal, accédez à la base de données depuis l'hôte en utilisant l'uri postgres

    psql postgresql://postgres:1234@localhost:5432/postgres

pour les utilisateurs de mac, remplacez psql par pgcli

37 votes

Je suis content que quelqu'un ait répondu à la question de savoir comment se connecter sans sauter dans le conteneur. thnx.

13 votes

Vous ne devriez vraiment pas utiliser sudo pour exécuter votre conteneur.

1 votes

@RussBateman - Pourquoi ça ?

111voto

Trying2Learn Points 11

Vous pouvez également y accéder par la commande docker exec en :

$ docker exec -it postgres-container bash

# su postgres

$ psql

Ou

$ docker exec -it postgres-container psql -U postgres

8 votes

Psql -U postgres

0 votes

Qu'est-ce que su postgres faire ?

2 votes

@Breno su postgres signifie : changer l'utilisateur pour l'utilisateur postgres.

21voto

Eugene Points 111

J'avais déjà fait tourner postgres sur la machine hôte et je ne voulais pas autoriser les connexions depuis le réseau, donc j'ai fait tourner une instance temporaire de postgres dans le conteneur et j'ai créé la base de données en seulement deux lignes :

# Run PostgreSQL
docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres

# Create database
docker exec -it postgres-container createdb -U postgres my-db

1 votes

Si vous voulez créer une seule base de données par défaut, vous pouvez également ajouter : -e POSTGRES_DB=my-db pour créer my-db au lieu de postgres

1voto

Trying2Learn Points 11

S'il s'agit d'une application backend django, vous pouvez faire quelque chose comme ceci.

docker exec -it container_id python manage.py dbshell

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X