2016-10-31 6 views
13

Ich habe lesen docker API und versuchen, einen einfachen Container erstellen und 1 Port freilegen.Expose Container-Port zu Host mit Docker für Windows in Windows 10

In meinem Beispiel habe ich eine Anwendung, die Port 9595 im Inneren des Behälters auf TCP hören und ich möchte es für den Zugriff von außen (das heißt der Wirt des Behälters) auf Port 9090.

Beim Erstellen des Containers habe ich "ExposedPorts": { "9595/tcp: {}" } und die "PortBindings": { "9595/tcp": [{ "HostPort": "9090" }] }.

Also, wenn ich vom Host-Rechner zugreifen es funktioniert! Allerdings, wenn ich http://localhost:9090 zugreifen, das ist, was ich diese Port Kartenfunktion erwarten verwenden, funktioniert es nicht ...

Während docker port containerID läuft Ich habe 9595/tcp -> 0.0.0.0:9090 und das soll Mittel, when connecting to any IP on the host, at port 9090, forward to the container in port 9595.

Also, was ist hier falsch? Warum kann ich keine Verbindung zu 9090 herstellen?

Ich bin für alle Klarstellungen dankbar.

+0

Die Frage ist nicht genug Informationen haben. Wir brauchen mindestens den Docker-Befehl, welches Bild verwendet oder die Dockerfile. Windows-Container oder Linux-Container? –

+0

** Docker Remote API ** gegen welche Docker-Engine? Windows-Container? Linux-Container? Sie können keinen Container ohne ein Basisbild ausführen. Welches Bild? Sie haben die ** Docker Remote API ** aufgerufen, wie Sie es nannten? Es ist ein resfful richtig? Welchen Befehl hast du benutzt? Ich kann nicht ** wissen ** über das, was Sie fragen, wenn Sie nicht ** GENUG ** Informationen geben. –

+0

Sorry, ich wollte nicht unhöflich Carlos sein, aber keiner Ihrer Kommentare war relevant für die Frage. Es ist egal für welche Frage das Bild ist. Was wichtig ist, ist, dass ich nach der API-Dokumentation Port 9090 außerhalb des Containers ausgesetzt und Port 9595 innerhalb des Containers zugeordnet hat und das nicht funktioniert.Netsh wirkt sich nicht auf das Verhalten oder die Konfiguration des Containers aus. –

Antwort

3

Bitte posten Sie den Docker Befehl, den Sie verwenden.

Sie benötigen eine spezielle Behandlung, wenn Sie Docker Toolbox oder Docker für Windows verwenden. Sie sollten localhost ohne Probleme sehen (wenn Ihr Container Linux ist). Wenn Sie Ihren Behälter von außen sichtbar sein wollen, versuchen Sie dies mit erhöhten Power Shell:

netsh interface portproxy add v4tov4 listenaddress=yourip listenport=9090 connectaddress=10.0.75.1 connectport=9090 

Wenn Ihr Container Windows ist jedoch nicht localhost sehen und Sie müssen die Behälter interne Adresse verwenden:

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" <cointainerid> 

Referenz: https://blog.docker.com/2016/09/build-your-first-docker-windows-server-container/

Grüße

+0

Hallo Carlos, ja, ich benutze neuesten Docker für Windows Beta auf Win10 und 'docker info' return" Serverversion ":" 1.12.2-cs2-ws-beta "Und nach Docker API v1.24 (https : //docs.docker.com/engine/reference/api/docker_remote_api_v1.24/#create-a-container) existieren tatsächlich die 'PortBindings'. –

+0

Sie benötigen zusätzliche Portumleitung für Andockfenster für Windows. Ich werde die Antwort aktualisieren –

+0

In der Tat habe ich 'docker inspect' verwendet Es erklärt den Unterschied in der Nomenklatur. –

2

Der Hafen ist wirklich zu sein Wenn es der "Außenwelt" wie erwartet ausgesetzt ist, ist es aufgrund einer aktuellen Windows-Netzwerkbeschränkung zufällig vom Container-Host-Rechner selbst auf der Loopback-Schnittstelle (localhost oder 127.0.0.1) nicht erreichbar. Anstatt zu versuchen, über die Loopback-Schnittstelle auf dem Container-Host darauf zuzugreifen, versuchen Sie, von einer anderen Maschine im Netzwerk darauf zuzugreifen, indem Sie die Container-Host-IP und die Container-Portnummer verwenden.

Es gibt eine gute writeup hierfür bei https://blog.sixeyed.com/published-ports-on-windows-containers-dont-do-loopback/

Verwandte Themen