2016-11-29 9 views
8

Ich lese in diesen Tagen viel darüber, wie ein Docker-Stack eingerichtet und ausgeführt wird. Aber eines der Dinge, die ich immer verpasse, ist, wie man bestimmte Container so konfiguriert, dass sie auf den Zugriff über ihren Domain-Namen und nicht nur über ihren Container-Namen mit docker-DNS antworten.So weisen Sie Container im Andockfenster Domänennamen zu

Was ich meine ist, dass ich habe eine Micro haben, die von außen zugänglich ist, zum Beispiel: users.mycompany.com, wird es an den Micro Container durchlaufen, die die Benutzer api

Dann ist der Umgang, wenn ich versuchen Sie, auf die customer-list.mycompany.com zuzugreifen, wird es durch den Microservice-Container, der die Kundenlisten

läuft Natürlich kann ich mit docker DNS zugreifen und verknüpfen Sie sie in ein Andock-Netzwerk, aber dies funktioniert nur wirklich, um Container zu Container, aber nicht Internet zu Container zugreifen zu wollen.

Weiß jemand, wie ich das tun soll? Oder der beste Weg, das einzurichten.

Antwort

9

Sie müssen also das Konzept der Port-Publishing verwenden, so dass ein Port von Ihrem Container über einen Port von Ihrem Host aus zugänglich ist. Mit diesem können Sie können Setup eine einfache proxy_pass von einem nginx, die users.mycompany.com umleitet myhost: 1337 (unter der Annahme, dass Sie Ihren Port 1337 veröffentlicht)

Also, wenn Sie wollen, dies zu tun, Sie werden Ihre Container einrichten müssen einen bestimmten Port belichten mit:

docker run -d -p 5000:5000 training/webapp # publish image port 5000 to host port 5000 

Sie können dann von Ihrem Host localhost curl: 5000, den Behälter zu öffnen.

curl -X GET localhost:5000 

Wenn Sie einen Domain-Namen vor einrichten möchten, müssen Sie einen Webserver-Instanz haben, die Sie proxy_pass Ihren Hostnamen zu Ihrem Container ermöglicht.

das heißt in nginx:

server { 
    listen 80; 
    server_name users.mycompany.com; 
    location/{ 
    proxy_pass http://localhost:5000; 
    } 
} 

Ich würde Ihnen raten this tutorial, zu folgen und vielleicht die docker run reference

0

Für alle prüfe ich weiß, hat Docker nicht bieten diese Funktion aus dem Kasten heraus. Aber sicherlich gibt es hier einige Problemumgehungen. In der Tat müssen Sie einen DNS auf Ihrem Host bereitstellen, der die Container unterscheidet und ihre Domänennamen in dynamischen IPs auflöst. So könnte man einen Versuch geben:

  1. einige von Docker-fähigen DNS-Lösungen bereitstellen (Ich schlage vor, Sie SkyDNSv1/SkyDock verwenden);

  2. Konfigurieren Sie Ihren Host, um mit diesem DNS zu arbeiten (standardmäßig teilt SkyDNS die Container einander mit Namen mit, aber der Host ist sich dessen nicht bewusst);

  3. Führen Sie Ihre Container mit explizitem --hostname (Sie wahrscheinlich Schema container_name.image_name.dev.skydns.local verwenden)

Sie können zu Schritt 2 und führen Sie Ihren Browser im Innern des Behälters überspringen: Es wird den Webanwendungscontainer nach Hostnamen erkennen.

Verwandte Themen