J'ai PostgreSQL sur un serveur dans un conteneur Docker. Comment puis-je y connecter de l'extérieur, c'est-à-dire de mon ordinateur local? Quel paramètre dois-je appliquer pour permettre cela?
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
Alors maintenant, vous avez mappé le port 5432 de votre conteneur sur le port 5432 de votre serveur. -p <Host_port>:<container_port>
. Alors maintenant votre postgres est accessible à partir de votre 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
Accédez à votre hôte local (où vous avez un outil ou le client psql).
psql -h public-ip-server -p 5432 -U postgres
(mot de passe mysecretpassword)
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
Donc, vous accédez à la base de données (qui tourne dans docker sur un serveur) à partir de votre hôte local.
Dans ce post il est expliqué en détail.
J'ai réussi à le faire fonctionner sur Linux
1 lancez d'abord le docker postgres, assurez-vous que le port est publié, j'utilise Alpine 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
2 utilisez un autre terminal, accédez à la base de données à partir de l'hôte à l'aide de postgres uri
psql postgresql://postgres:1234@localhost:5432/postgres
pour les utilisateurs de mac, remplacez psql par pgcli
J'avais déjà exécuté postgres sur la machine hôte et je ne voulais pas autoriser les connexions depuis le réseau. J'ai donc exécuté une instance postgres temporaire dans un conteneur et créé une base de données en deux lignes seulement:
# 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
Vous pouvez également accéder via la commande docker exec également.
$ docker exec -it postgres-container bash
# su postgres
$ psql
J'utilise Django avec Postgres dans des conteneurs Docker. dans le fichier docker-compose, ajoutez les éléments suivants:
db:
image: postgres:10-Alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
**ports:
- "6543:5432"**
qui va ajouter un port accessible par votre machine locale. pour ma part, j’y ai connecté DBeaver. Cela évitera les conflits de ports entre votre demande d'application et la demande d'ordinateur local. Au début, j'ai reçu un message disant que le port 5432 était en cours d'utilisation (c'est-à-dire par l'application Django) et que je ne pouvais donc pas y accéder par pgAdmin ou DBeaver.
Pour vous connecter à partir de l'hôte local, vous devez ajouter '--net Host':
docker run --name some-postgres --net Host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
Vous pouvez accéder directement au serveur sans utiliser exec de votre localhost, en utilisant:
psql -h localhost -p 5432 -U postgres
J'ai essayé de me connecter depuis localhost (mac) à un conteneur postgres. J'ai changé le port dans le fichier docker-compose de 5432 à 3306 et 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 sur le port 5432, tout fonctionne correctement.
db:
image: postgres
ports:
- 5432:5432
restart: always
volumes:
- "db_sql:/var/lib/mysql"
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres_db
C'était mon expérience que je voulais partager. Peut-être que quelqu'un peut s'en servir.
d'abord ouvrir l'image de docker pour le postgres
docker exec -it <container_name>
alors vous obtiendrez la racine --root@868594e88b53:/#
it besoin de la connexion à la base de données
psql postgresql://<tablename>:<databasepassword>@postgres:5432/<database>
docker ps -a
pour obtenir les identifiants de conteneur, puis docker exec -it psql -U -W
S'il s'agit d'une application dorsale Django, vous pouvez faire quelque chose comme ceci.
docker exec -it container_id python manage.py dbshell
Il y a de bonnes réponses ici, mais si vous souhaitez avoir une interface pour la gestion de base de données postgres, vous pouvez installer pgAdmin sur votre ordinateur local et vous connecter à la machine distante à l'aide de son adresse IP et du port exposé postgres (par défaut, 5432).
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 vous connecter à votre base de données postgres de l'extérieur de son conteneur docker :
psql -h localhost -p 5416 -U <my-user> -d <my-database>