2015-01-07 17 views
12

Ich habe mehrere Docker Container auf einer einzigen Maschine. Auf jedem Container wird ein Prozess und ein Webserver ausgeführt, der eine API für den Prozess bereitstellt.Mehrere Docker Container als Webserver auf einer einzigen IP

Meine Frage ist, wie kann ich auf die API von meinem Browser zugreifen, wenn der Standardport 80 ist? Um den Web-Server innerhalb des Behälters zuzugreifen Docker ich folgend:

sudo docker run -p 80:80 -t -i <yourname>/<imagename> 

So kann ich von meinem Computer-Terminal tun kann:

curl http://hostIP:80/foobar 

Aber wie das mit mehreren Behältern zu handhaben und mehr Webserver?

Antwort

20

Sie können entweder mehrere Ports, z.

docker run -p 8080:80 -t -i <yourname>/<imagename> 
docker run -p 8081:80 -t -i <yourname1>/<imagename1> 

oder einen Proxy-put (nginx, Apache, Lack, etc.) vor dem API-Container.

aktualisieren:

Der einfachste Weg, einen Proxy wäre zu verknüpfen es mit den API-Containern zu tun, zum Beispiel Apache-Konfiguration mit

RewriteRule ^api1/(.*)$ http://api1/$1 [proxy] 
RewriteRule ^api2/(.*)$ http://api2/$1 [proxy] 

können Sie Ihre Container wie folgt ausführen:

docker run --name api1 <yourname>/<imagename> 
docker run --name api2 <yourname1>/<imagename1> 
docker run --link api1:api1 --link api2:api2 -p 80:80 <my_proxy_container> 

Dies könnte allerdings etwas umständlich sein, wenn Sie die api Container neu starten müssen, wie der Proxy-Container neu gestartet werden müsste entweder (Links sind bei Docker noch ziemlich statisch). Wenn dies zu einem Problem wird, können Sie sich Ansätze wie fig oder die automatische Proxy-Konfiguration ansehen: http://jasonwilder.com/blog/2014/03/25/automated-nginx-reverse-proxy-for-docker/. Die spätere Verknüpfung zeigt auch Proxying mit Nginx.

Update II:

in einer moderneren Versionen von Docker ihm möglich ist, zu verwenden user defined network anstelle der Links oben gezeigt einige der Nachteile des veralteten Verbindungsmechanismus zu überwinden.

6

Nur ein einzelner Prozess darf gleichzeitig an einen Port gebunden sein. Wenn also mehrere Container ausgeführt werden, bedeutet dies, dass jeder an einer anderen Portnummer angezeigt wird. Docker kann dies automatisch für Sie tun, indem Sie das Attribut "-P" verwenden.

sudo docker run -P -t -i <yourname>/<imagename> 

Sie können über den „Docker Port“ und „Docker inspizieren“ Befehle, um die tatsächliche Portnummer zu jedem Behälter zugeordnet zu sehen.

Verwandte Themen