web-dev-qa-db-fra.com

Modification d'un port de serveur de conteneurs PostgreSQL dans Docker Compose

J'essaie de déployer un deuxième conteneur de base de données sur un serveur distant à l'aide de Docker compose. Ce serveur postgresql s'exécute sur le port 5433 par opposition à 5432 tel qu'utilisé par le premier conteneur postgresql.

Lorsque je configure l'application, j'obtiens cette sortie d'erreur:

web_1  | Django.db.utils.OperationalError: could not connect to server: Connection refused
web_1  |    Is the server running on Host "db" (172.17.0.2) and accepting
web_1  |    TCP/IP connections on port 5433?

et mon fichier de composition docker est:

db:
  image: postgres:latest
  environment:
    POSTGRES_PASSWORD: route_admin
    POSTGRES_USER: route_admin
  expose:
    - "5433"
  ports:
    - "5433"
  volumes:
    - ./backups:/home/backups



web:
  build: .
  command:  bash -c "sleep 5 && python -u application/manage.py runserver 0.0.0.0:8081"
  volumes:
    - .:/code
  ports:
    - "81:8081"
  links:
    - db
  environment:
    - PYTHONUNBUFFERED=0

Je pense que le problème doit être le fichier postgresql.conf sur l'instance de serveur ayant défini le port sur 5432, provoquant l'erreur lorsque mon application tente de s'y connecter. Existe-t-il un moyen simple de changer le port en utilisant une commande dans le fichier de composition au lieu de jouer avec les volumes pour remplacer le fichier?

J'utilise le conteneur postgresql officiel pour ce travail.

20
GreenGodot

Je suppose que postgres s'exécute sur le port 5432 dans le conteneur et que vous souhaitez l'exposer sur l'hôte sur 5433.

Utilisez ceci dans la strophe des ports:

ports:
    -"5433:5432"

Cela exposera le serveur sur le port 5433 de l'hôte. Vous pouvez vous débarrasser de votre strophe d'exposition existante dans ce scénario.

Si vous souhaitez uniquement exposer le service à d'autres services déclarés dans le fichier de composition (et NON à localhost), utilisez simplement la strophe expose et pointez-la vers le port 5432 déjà exposé en interne.

40
Robert Moskal