J'ai Postgresql sur un serveur dans un conteneur de 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 autoriser cela?
202
J'ai Postgresql sur un serveur dans un conteneur de 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 autoriser cela?
Réponses:
Vous pouvez exécuter Postgres de cette façon (mapper un port):
Vous avez maintenant mappé le port 5432 de votre conteneur sur le port 5432 de votre serveur.
-p <host_port>:<container_port>
.Donc maintenant, vos postgres sont accessibles depuis votrepublic-server-ip:5432
Pour tester: Exécutez la base de données postgres (commande ci-dessus)
Entrez dans votre conteneur et créez une base de données:
Accédez à votre hôte local (où vous avez un outil ou le client psql).
(mot de passe mysecretpassword)
Vous accédez donc à la base de données (qui s'exécute dans docker sur un serveur) à partir de votre hôte local.
Dans cet article, il est expliqué en détail.
la source
ifconfig -u | grep 'inet ' | grep -v 127.0.0.1 | cut -d\ -f2 | head -1
docker run --net=host --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
J'ai réussi à le faire fonctionner sous Linux
lancez le docker postgres - assurez-vous que le port est publié, j'utilise alpin car il est léger.
sudo docker run --rm -P -p 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234" --name pg postgres:alpine
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
la source
sudo
pour exécuter votre conteneur.Vous pouvez également accéder via la commande docker exec en:
Ou
la source
su postgres
-on?J'avais déjà exécuté postgres sur la machine hôte et je ne voulais pas autoriser les connexions à partir du réseau, j'ai donc exécuté une instance temporaire de postgres dans un conteneur et créé une base de données en seulement deux lignes:
la source
-e POSTGRES_DB=my-db
pour créer my-db au lieu de postgresJ'utilise django avec postgres dans des conteneurs Docker. dans le fichier docker-compose, ajoutez ce qui suit:
qui ajoutera un port accessible par votre machine locale. pour moi, j'y ai connecté DBeaver. cela évitera les conflits de ports entre votre demande d'application et la demande de l'ordinateur local. au début, j'ai reçu un message disant que le port 5432 est en cours d'utilisation (qui est par l'application django) donc je n'ai pas pu accéder par pgAdmin ou DBeaver.
la source
Pour vous connecter depuis l'hôte local, vous devez ajouter «--net host»:
Vous pouvez accéder directement au serveur sans utiliser exec depuis votre hôte local, en utilisant:
la source
J'ai essayé de me connecter de localhost (mac) à un conteneur postgres. J'ai changé le port dans le fichier docker-compose de 5432 à 3306 et j'ai démarré le conteneur. Aucune idée pourquoi je l'ai fait: |
Ensuite, j'ai essayé de me connecter à postgres via PSequel et l'administrateur et la connexion n'a pas pu être établie.
Après être revenu au port 5432, tout fonctionne correctement.
C'était mon expérience que je voulais partager. Peut-être que quelqu'un peut en profiter.
la source
/var/lib/mysql
?Je suppose que vous voulez pouvoir afficher les données présentes dans votre conteneur à chaque fois que vous vous y connectez de l'extérieur. Pour ce faire, vous devrez conserver les données sur l'image postgres.
Si vous ne disposez pas de données persistantes, vous devrez répéter tout ce que vous avez fait la première fois.
Les étapes 3, 5, 6, 7 et 8 répondent directement à votre question.
Voici un aperçu détaillé de l'ensemble du processus que j'ai suivi sous Windows 10 PowerShell (les commandes sont les mêmes sous Linux et macOS également):
Étape 1 : Démarrez PowerShell en mode non-administrateur
Étape 2 : Téléchargez l'image docker postgres:
docker pull postgres:latest
Étape 3 : Démarrez le conteneur Docker en mode détaché et conservez les données sur l'image postgres en créant un volume et en le liant à une destination
( Remarque : par défaut, 5432 est le port par défaut utilisé; mais indiquez-le explicitement pour éviter les erreurs de connexion de clients comme pgadmin, dbeaver, etc.)
docker run --name postgres-test -e POSTGRES_PASSWORD=password -p 5432:5432 -v postgres-data:/var/lib/postgresql/data -d postgres:latest
Étape 4 : vérifier l'état des conteneurs en cours d'exécution
docker ps -a
Étape 5 : Accédez à container_name en mode interactif
( Remarque : les commandes comme ls, pwd, etc. peuvent être exécutées ici si vous avez vérifié les conteneurs Linux lors de l'installation)
docker exec -it postgres-test psql -U postgres
Étape 6 : Créez des exemples de données. À ce stade, vous pouvez jouer avec
psql
commandes de la manière suivante:Étape 7 : Ouvrez une application client de base de données comme
pgadmin
oudbeaver
et saisissez ce qui suit dans les champs de connexion:Étape 8 : Entrez la requête
select * from test_table
dans l'éditeur de requête et vous devriez pouvoir voir la sortie123
la source
Pour une raison quelconque, le port 5432 semble protégé. J'ai changé ma configuration de port de
5432:5432
à5416:5432
et la commande suivante a fonctionné pour se connecter à votre base de données postgres depuis l'extérieur de son conteneur docker :la source
postgres
service sur votre machine hôte qui se liera déjà à localhost: 5432 vous empêchant de l'utiliser. Le mappage d'un port d'hôte différent au port par défaut 5432 à l'intérieur du conteneur est une bonne solution à cela; Sinon, vous pouvez arrêter le service postgres sur votre hôte, mais il est peut-être utilisé pour quelque chose dont vous avez besoin.ouvrez d'abord l'image du docker pour les postgres
alors vous obtiendrez la racine -
root@868594e88b53:/#
il faut la connexion à la base de donnéesla source
Dans le cas où il s'agit d'une application django backend, vous pouvez faire quelque chose comme ça.
la source
Il y a de bonnes réponses ici mais si vous aimez avoir une interface pour la gestion de la base de données postgres, vous pouvez installer pgAdmin sur votre ordinateur local et vous connecter à la machine distante en utilisant son IP et le port exposé postgres (par défaut 5432).
la source
docker ps -a
pour obtenir les identifiants de conteneur, puis docker exec -it psql -U -Wla source
Je sais que c'est tard, si vous avez utilisé docker-compose comme @Martin
Voici les extraits qui m'ont aidé à me connecter à psql à l'intérieur du conteneur
docker-compose run db bash
root@de96f9358b70:/# psql -h db -U root -d postgres_db
Je ne peux pas faire de commentaire car je n'ai pas 50 réputation. Alors j'espère que cela vous aidera.
la source