2
votes

Impossible de connecter la base de données PostgreSQL du docker à python

J'essaye d'utiliser Postgresql avec python. J'ai utilisé le menu fixe suivant pour composer le fichier.

conn = psycopg2.connect(
    database = "db_test",
    user ="admin",
    password = "admin_123",
    host = "db"
)

Avec le code suivant, j'essaye de me connecter à la base de données.

version: '3.1'

services:

  db:
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: admin_123
      POSTGRES_USER: admin

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

Mais j'obtiens cette erreur.

OperationalError: impossible de traduire le nom d'hôte "db" en adresse: nodename ni servname fournis, ou inconnus

Qu'est-ce que je fais mal?


8 commentaires

Copie possible de docker-compose: différence entre le réseau et le lien


Comment ? pourriez-vous expliquer? J'ai lu ça mais je ne l'ai pas compris


Où s'exécute votre code Python; sur l'hôte ou dans un conteneur? Si dans un conteneur, comment l'avez-vous commencé?


Je travaille avec Jupyter là-bas


Désolé, ce lien n'est probablement pas pertinent ici. Je pensais que vous essayez d'accéder à db dans adminer , est-ce correct?


J'essaye d'accéder à DB avec python


@TheTechGuy Essayez-vous de vous connecter à la base de données depuis votre machine hôte?


oui, la même machine sur laquelle le docker fonctionne, j'ai juste besoin d'insérer des données dans la base de données. La base de données s'exécute dans Docker. et j'ai un notebook Jupyter avec lequel j'essaye de me connecter. Pendant que j'essaie de me connecter, j'ai l'erreur mentionnée.


3 Réponses :


6
votes

Vous devez exposer le port BD dans le docker composez comme ceci:

db:
image: postgres
restart: always
environment:
  POSTGRES_PASSWORD: admin_123
  POSTGRES_USER: admin
ports:
    - "5432:5432"

Et puis connectez-vous avec localhost:5432


0 commentaires

0
votes

Un autre scénario possible,

Vérifiez si des ports ont été utilisés ou non par un autre conteneur docker. Utilisez la commande:

$ docker container ls --format "table {{.ID}}\t{{.Names}}\t{{.Ports}}" -a


0 commentaires

0
votes

Voici mon docker-compose.yml

$ cat docker-compose.yml

host: localhost
port: 5432
maintenance database: postgres
username: abcUser
password: Password

Maintenant dans PgAdmin4, vous pouvez configurer un nouveau serveur comme ci-dessous pour tester le connexion:

version: '3.1' # specify docker-compose version
services:
  dockerpgdb:
    image: postgres
    ports:
      - "5432:5432"
    restart: always
    environment:
      POSTGRES_PASSWORD: Password
      POSTGRES_DB: dockerpgdb
      POSTGRES_USER: abcUser
    volumes:
      - ./data:/var/lib/postgresql%


0 commentaires