web-dev-qa-db-fra.com

Plusieurs conteneurs de docker avec le même port de conteneurs connectés au même réseau

J'ai une application qui dépend de plusieurs conteneurs Docker. J'utilise Docker Compose de sorte que tous soient dans le même réseau pour la communication inter-conteneur. Mais, deux de mes conteneurs écoutent le même port 8080 à l'intérieur de leurs conteneurs respectifs, mais sont mappés sur différents ports de l'hôte: 8072 8073. Pour la communication inter-conteneurs, car nous utilisons le port du conteneur ces problèmes de cause?

Contraintes:

  1. J'ai besoin des deux conteneurs pour que mon application soit exécutée. Ainsi, je ne peux pas isoler l'autre conteneur avec le même port interne à un réseau différent
  2. Tous les conteneurs doivent fonctionner sur le même hôte.

Je suis nouveau à Docker et je ne sais pas comment résoudre ce problème.

Merci

7
Abhijit Balaji

IIUC Voir la documentation ici: https://docs.docker.com/commose/networking

Vous n'avez pas besoin d'exposer chacun des ports du service de l'hôte à moins que vous souhaitiez y accéder de l'hôte, c'est-à-dire à l'extérieur du réseau créé Docker-Compose.

Les ports doivent être uniques par hôte mais Chaque service de votre réseau créé Docker-compose peut utiliser le même port avec impunité et est référencé par :.

Dans l'exemple Docker, il pourrait y avoir 2 services Postgres. Chacun aurait besoin d'un nom unique: db1; db2 Mais les deux pourraient utiliser le même port - "5432" et soyez particulièrement adressable du service appelé web (et l'un de l'autre) comme db1:8432 et db2:8432.

Chaque service correspond efficacement à un hôte différent. Ainsi, tant que les ports sont uniques pour chaque service | hôte, vous êtes bon. Et, tant que tous les ports que vous exposez sur l'hôte sont uniques, vous êtes bon aussi ....

Extension de l'exemple, db1 pourrait exposer le port 9432:8432 mais alors db2 aurait besoin de trouver un port hôte différent à utiliser, peut-être 9433:8432.

Dans le réseau créé Docker-Compose, vous accéderiez à db1 comme db1:8432 et db2 comme db2:8432.

De l'hôte (en dehors du réseau Docker-Compose Create), vous accéderiez à db1 comme localhost:9432 et db2 comme localhost:9433.

[~ # ~] NB [~ # ~] Il est probablement une bonne pratique de n'exposer que des ports de service à l'hôte lorsque ces services doivent être accessibles à l'extérieur. (par exemple, web doit probablement être exposé mais dbX n'a probablement pas besoin d'être exposé). Vous voudrez peut-être être plus libéral dans l'exposition des ports de service tout en débogage.

4
DazWilkin