webentwicklung-frage-antwort-db.com.de

Docker unter Windows: Wie stellt man eine Verbindung mit dem Container vom Host aus über die Container-IP her?

Ich habe

  • Windows 10
  • Docker für Windows V. 1.12.5 Rev. 9503, das nicht mehr auf boot2docker oder VirtualBox angewiesen ist.

Ich habe eine Reihe von JBoss-Instanzen, die in Docker-Images ausgeführt werden (172.18.0.2 ist eine Datenbank):

  • instanz 1: Name: jboss-eap, IP: 172.18.0.3
  • instanz 2: Name: jboss-eap-arquillian, IP: 172.18.0.4

das soll gleichzeitig laufen. Jede JBoss-Instanz exportiert z. seine Ports 8787, 8080 und 8443.

Ich habe auch ein überbrücktes Netzwerk erstellt: Andocknetzwerk --driver bridge --subnet 172.18.0.0/24 bridged_network

Derzeit habe ich eine lokale Portweiterleitung eingerichtet, so dass der Host mit einem Präfix auf die verschiedenen Dienste zugreifen kann (z. B. beim Zugriff auf den Port 8080 von Instanz 1 verwendet der Host localhost: 28080, um eine Verbindung herzustellen). Aber das ist ziemlich fehleranfällig.

Nun möchte ich vom Host aus über die IP des Containers auf diese Ports zugreifen, z. Aufruf 172.18.0.4:8080 (nächster Schritt: Verwendung des Hostnamens: jboss-eap-arquillian: 8080) . Während dies reibungslos von Container zu Container funktioniert, konnte ich es nicht einrichten, um eine Verbindung herzustellen der Gastgeber.

Es gibt eine Windows-Netzwerkschnittstelle (Typ: DockerNAT) mit IP 10.0.75.1, aber es ist möglich, dass ich sie manuell erstellt habe (unsicher ... seit geraumer Zeit versucht). Dies ist jedoch hilfreich, wenn der Port des Containers an dieses Gerät gebunden wird, z. Andocklauf ... -p 10.0.75.1:8080:8080. Ich kann den Dienst dann mit 10.0.75.1:8080 aufrufen, aber das hilft mir nicht für den 2. Container.

Ich habe auch versucht, das Host-Netzwerkgerät des Dockers zu verwenden, aber das A. scheint nur für eine Maschine zu funktionieren b. Ich kann die IP nicht statisch einstellen, was für JUnit-Tests erforderlich ist, die eine statische Konfiguration ausführen .. Hinweis: Ich kann mich nicht darauf verlassen, dass das Netzwerk-DHCP beim Start eine IP-Adresse zuweist, da ich mein Netzwerk (und damit das DHCP) häufig wechsle was wiederum zu einer unfixierten IP führt.

Grundsätzlich suche ich nach einer Möglichkeit, das Netzwerk/Container so einzurichten, dass ich den vom Container bereitgestellten Dienst (z. B. an Port 8080) mit der Container-IP (z. B. 172.18.0.3 für 1) aufrufen kann. vom Host mit 172.18.0.3:8080.

9
kniffte

Auf dem Docker für Windows können Sie die Adresse 10.0.75.1:8080 verwenden. Sie müssen jedoch Ihre Firewall konfigurieren. Eine bessere Methode ist die Verwendung der Adresse 10.0.75.2:8080.

für beide Adressen müssen Sie Ihren Port veröffentlichen, wenn Sie Container ausführen

docker run -p 8080:8080 image_name

Weitere Informationen https://github.com/docker/for-win/issues/334#issuecomment-297030101

8
hrakup

du kannst nicht Docker ist keine virtuelle Maschine, und Sie erhalten über die IP-Adresse keinen Zugriff auf den Docker Host.

meine gleiche Frage finden Sie hier: https://forums.docker.com/t/access-dockerized-services-via-the-containers-ip-address/21151

und meine Erkenntnis, wie das funktioniert, hier: https://derickbailey.com/2016/08/29/so-youre-saying-docker-isnt-a-virtual-machine/

wenn Sie die im Container gehostete App verwenden müssen, legen Sie über Ihren localhost den Port der App mit der Option -p von docker run frei.

docker run -p 8080:8080 image_name

und verbinden Sie sich dann mit localhost:8080 für diesen Dienst

0
Derick Bailey