2014-02-23 17 views
8

ich angefangen hat, für Entwickler Docker verwenden, mit dem folgende Setup:Remote-Zugriff auf Webserver in Docker Containern

  • Host-Maschine - Ubuntu-Server.
  • Docker Container - Webapp mit Tomcat Server (mit https).

Soweit Host-Container-Zugriff geht - alles funktioniert gut. Allerdings, ich kann nicht auf die Webanwendung des Containers von einem Remote-Computer zugreifen (obwohl immer noch im selben Netzwerk).

Beim Laufen

docker port <container-id> 443 

Ausgang ist wie erwartet, so Docker Hafen Bindung scheint in Ordnung.

172.16.*.*:<random-port> 

Irgendwelche Ideen?

Vielen Dank!

Antwort

9

ich herausgefunden, was ich verpaßt, also hier ist ein einfacher Fluss für Behälter Webapps von entfernten Rechnern Docker Zugriff:

Schritt # 1: physische Host-Ports binden (zB 22, 443, 80, ...) zu den virtuellen Ports des Containers. möglich Syntax:

docker run -p 127.0.0.1:443:3444 -d <docker-image-name> 

(siehe docker docs for port redirection mit allen Optionen)

Schritt # 2: Redirect physisch Port der Host-Container zugewiesen virtuell Port. möglich (Linux) Syntax:

iptables -t nat -A PREROUTING -i <host-interface-device> -p tcp --dport <host-physical-port> -j REDIRECT --to-port <container-virtual-port> 

Das sollte den grundlegenden Anwendungsfall abdecken.

Viel Glück!

3

Korrigieren Sie mich, wenn ich falsch liege, aber soweit ich weiß, erstellt docker host ein privates Netzwerk für seine Container, das von außen nicht zugänglich ist. Das heißt, Ihre beste Wette wäre wahrscheinlich der Zugriff auf den Container unter {host_IP}: {mapped_port}.

+0

Du hast Recht, und sollte so funktionieren (siehe [Docker .io: Portumleitung] (http://docs.docker.io/en/latest/use/port_redirection/)). Mein Problem scheint jedoch mit meinem Host (Ubuntu-Server 13.10) in Verbindung zu stehen, der mich beim Zugriff auf https: // {host_IP}: {mapped_port} von einem Remote-Rechner nicht an den Container weiterleitet. – tomper

1

Wenn Ihr Container mit einer Dockerfile erstellt wurde, die über eine EXPOSE-Anweisung verfügt, z. EXPOSE 443, dann können Sie den Container mit der Option -P starten (wie in "publish" oder "public"). Der Port wird auf Verbindungen von entfernten Rechnern zur Verfügung gestellt werden:

$ docker run -d -P mywebservice 

Wenn Sie keine Dockerfile verwendet haben, oder wenn es keine EXPOSE Aussage hat (es soll!), Dann können Sie auch ein explizites Port-Mapping tun:

$ docker run -d -p 80 mywebservice 

In beiden Fällen wird das Ergebnis in ein öffentlich zugänglicher Hafen sein:

$ docker ps 
9bcb… mywebservice:latest … 0.0.0.0:49153->80/tcp … 

Last but not least, können Sie den Port erzwingen Anzahl, wenn Sie benötigen:

$ docker run -d -p 8442:80 mywebservice 

In diesem Fall die Verbindung zu Ihrem Adresse Docker Host-IP auf Port 8442 den Behälter gelangen.

Verwandte Themen