Der verknüpfte Docker-Container ist über den exponierten Port nicht erreichbar

7

Ich habe eine docker-compose.yml-Datei mit zwei Containern:

containerA:
...
ports:
- "80:9000"

containerB:
...
links:
- containerA

Was ich erwartet hatte, war, containerAüber Port 80 erreichbar zu sein containerB, aber es ist nur über Port 9000 erreichbar. Der 80-Port ist nur von einem Host-Computer aus sichtbar.

Gibt es eine Möglichkeit, den containerA9000-Port des Containers über den 80-Port für alle Container erreichbar zu machen, mit denen er verbunden ist, nicht nur für den Host-Computer?

Glueon
quelle

Antworten:

7

Wenn Sie einen Port mithilfe des portsAbschnitts der Docker-Erstellungsdatei verfügbar machen, geben Sie eine host:containerZuordnung an. Daher wird erwartet, dass 9000 auf dem Container nur über 80 auf dem Host erreichbar sind.

Sie können einen Port direkt anderen Containern zugänglich machen https://docs.docker.com/compose/yml/#expose , aber Sie können nicht die externe Portnummer angeben, sondern nur die 9000 (nicht die 80).

Eine andere Möglichkeit besteht darin, das Botschaftermuster zu verwenden, bei dem Sie einen "Botschafter" haben, der zwischen einem Verbraucher und einem Anbieter wechselt. Https://docs.docker.com/articles/ambassador_pattern_linking/

Also Container B -> Container A Botschafter -> Container A.

Sie könnten Port 80 auf dem Botschafter verfügbar machen, und dann könnte der Botschafter eine Verbindung zum Port 9000 von Container A herstellen.

Wenn Sie eine ausgefeiltere Infrastruktur aufbauen, können Sie mit Dienstregistern kreativer werden, sodass sich Container über eine Dienstregistrierung und nicht über einfache Containerverknüpfungen gegenseitig lokalisieren.

In der Regel sollten Sie den externen Port jedoch nicht direkt angeben. Wenn Sie dies tun und versuchen, mehrere Kopien des Containers auf demselben Docker-Host auszuführen, treten Portkonflikte auf. Wenn Sie einen anderen Container ausführen, der versucht, denselben externen Port verfügbar zu machen, treten auch Portkonflikte auf.

Jeff Storey
quelle