it-swarm.com.de

So weisen Sie Containern im Docker Domänennamen zu

Ich lese gerade viel darüber, wie ein Docker-Stack eingerichtet und ausgeführt wird. Aber eines der Dinge, die ich immer vermisse, ist die Einstellung, dass bestimmte Container auf den Zugriff über ihren Domänennamen und nicht nur auf ihren Containernamen mit Docker-DNS reagieren.

Was ich damit meine, ist, dass ich einen Microservice habe, der von außen zugänglich ist, zum Beispiel: users.mycompany.com. Er wird an den Microservice-Container weitergeleitet, der die Benutzer-API verwaltet

Wenn ich dann versuche, auf customer-list.mycompany.com zuzugreifen, wird der Mikroservice-Container weitergeleitet, der die Kundenlisten verarbeitet

Natürlich kann ich mithilfe von Docker-DNS auf sie zugreifen und sie mit einem Docker-Netzwerk verknüpfen. Dies funktioniert jedoch nur, wenn auf Container auf Container zugegriffen werden soll, nicht aber auf Internet auf Container.

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

13

Daher müssen Sie das Konzept der Port-Veröffentlichung verwenden, damit ein Port aus Ihrem Container über einen Port von Ihrem Host aus erreichbar ist. Auf diese Weise können Sie einen einfachen Proxy_pass von einem Nginx einrichten, der users.mycompany.com an myhost weiterleitet: 1337 (vorausgesetzt, Sie haben Ihren Port an 1337 veröffentlicht).

Wenn Sie dies tun möchten, müssen Sie Ihren Container so einrichten, dass ein bestimmter Port verfügbar gemacht wird: 

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

Sie können dann von Ihrem Host aus Ihren localhost: 5000 auf den Container zugreifen.

curl -X GET localhost:5000

Wenn Sie einen Domänennamen einrichten möchten, benötigen Sie eine Webserver-Instanz, über die Sie den Hostnamen proxy_pass an Ihren Container übergeben können.

in nginx:

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

Ich würde dir raten, diesem Tutorial zu folgen und vielleicht die Docker-Run-Referenz zu überprüfen

17
MagicMicky

Soweit ich weiß, bietet Docker diese Funktion nicht standardmäßig an. Sicher gibt es hier jedoch mehrere Workarounds. In der Tat müssen Sie auf Ihrem Host ein DNS bereitstellen, das die Container unterscheidet und ihre Domänennamen in dynamischen IP-Adressen auflöst. Sie könnten also versuchen:

  1. Stellen Sie einige Docker-fähige DNS-Lösungen bereit (ich schlage vor, SkyDNSv1/SkyDock zu verwenden);

  2. Konfigurieren Sie Ihren Host für die Arbeit mit diesem DNS (SkyDNS erkennt die Container standardmäßig anhand des Namens, der Host weiß dies jedoch nicht).

  3. Führen Sie Ihre Container mit dem expliziten --hostname aus (Sie werden wahrscheinlich das Schema container_name.image_name.dev.skydns.local verwenden)

Sie können Schritt 2 überspringen und Ihren Browser auch in Container ausführen: Der Webanwendungscontainer wird anhand des Hostnamens ermittelt.

1
K.Martin