wake-up-neo.com

Docker-compose: Einstellung des Hostnamens auf den Hostnamen, auf dem der Container ausgeführt wird

Im Moment habe ich zwei Knoten im Schwarmcluster

$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
yey1njv9uz8adf33m7oz0h80f *   redis2              Ready               Active              Leader
lbo91v2l15h24isfd5jegoxu1     redis3              Ready               Active   

dies ist die Datei docker-compose.yml

version: "3"
services:
  daggr:
    # replace username/repo:tag with your name and image details
    image: daggr
    hostname: examplehostname
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "4000:80"
    networks:
      - webnet
  visualizer:
    image: dockersamples/visualizer:stable
    ports:
        - "8080:8080"
    volumes:
        - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
        placement:
            constraints: [node.role == manager]
    networks:
        - webnet
  redis:
    image: redis
    networks:
        - webnet
networks:
  webnet:

wie Sie sehen, setze ich explizit den Hostnamen für den Daggr-Dienst

der Daggr-Container führt im Wesentlichen einen Python-Tornado-Webserver aus

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('Hello from daggr running on %s\n' % socket.gethostname())

Ich habe es wie unten getestet

$ curl redis2:4000
Hello from daggr running on examplehostname

Anstatt den Hostnamen statisch festzulegen, möchte ich, dass er dynamisch an den Hostnamen anpasst, an dem der Container ausgeführt wird. dh. Wenn der daggr-Container auf redis2 läuft, sollte er redis2 und auf redis3 sagen, er sollte redis3 sagen.

Wie kann ich das aus der Datei docker-compose.yml angeben?

4
ealeon

Wenn Sie mindestens Docker 17.10 ausführen, können Sie Folgendes verwenden:

services:
  daggr:
    hostname: '{{.Node.Hostname}}'

Siehe this für weitere Informationen.

4

Die oben gewählte Antwort funktionierte nicht für mich (vermutlich, da ich im Schwarmmodus nicht Docker/Docker-Compose betreibe). 

Ich konnte den Container-Hostnamen für meinen Reverse-Proxy so einstellen, dass er mit dem FQDN des Docker-Hosts übereinstimmt, indem Sie folgende Schritte ausführen: 

version: '3'

reverse-proxy:
  hostname: $HOSTNAME

Dies ermöglichte mir die einfache Konfiguration von Nginx, um vor dem Start das richtige Server-Zertifikats-/Schlüsselpaar auszuwählen.

1
brandonsimpkins