wake-up-neo.net

Verwenden Sie --add-Host oder extra_hosts mit docker-compose

Ich verwende docker-compose, Um eine Testumgebung auszuführen, die aus ungefähr 5 verschiedenen Containern besteht. Die Verknüpfungen zwischen Containern und die freigegebenen Volumes (Volumes-from) funktionieren wunderbar. Ich setze auch einige Ports für den Host-Rechner frei, was gut funktioniert.

Was mir fehlt, ist eine Möglichkeit, einige meiner realen Server in diese Umgebung einzubinden, ohne die IP-Adresse fest zu codieren. Mit docker run Können Sie mit --add-Host Eine weitere Zeile in Ihre /etc/hosts - Datei einfügen. Gibt es eine Möglichkeit, mit Docker-Compose etwas Ähnliches zu tun?

45
Pieter

Ich habe eine gute Nachricht: Dies wird in Compose 1.3 sein!

Ich benutze es in der aktuellen RC (RC1) wie folgt:

rng:
  build: rng
  extra_hosts:
    seed: 1.2.3.4
    tree: 4.3.2.1
50
jpetazzo

https://docs.docker.com/compose/compose-file/#extra_hosts

extra_hosts - Hostnamenzuordnungen hinzufügen. Verwendet dieselben Werte wie der Docker-Client --add-Host-Parameter.

extra_hosts:
 - "somehost:162.242.195.82"
 - "otherhost:50.31.209.229"

Ein Eintrag mit der IP-Adresse und dem Hostnamen wird in/etc/hosts> in Containern für diesen Dienst erstellt, z. B .:

162.242.195.82  somehost
50.31.209.229   otherhost
45
oneklc

Dies ist im Feature-Backlog für Compose enthalten, es sieht jedoch nicht so aus, als ob die Arbeit bereits begonnen hat. Github Problem.

1
Kevan Ahlquist

Es scheint möglich zu sein, zu sagen:

extra_hosts:
 - "loghost:localhost"

Wenn der Teil nach dem Doppelpunkt (normalerweise eine IP-Adresse) nicht mit einer Ziffer beginnt, wird die Namensauflösung durchgeführt, um eine IP-Adresse für localhost zu ermitteln und der Datei/etc/hosts des Containers etwas hinzuzufügen:

127.0.0.1 loghost

... unter der Annahme, dass localhost auf dem Host-System in 127.0.0.1 aufgelöst wird.

Es sieht so aus, als wäre es wirklich einfach, es in den Quellcode von docker-compose einzufügen: compose/config/types.pys parse_extra_hosts-Funktion würde es wahrscheinlich tun.

Für Docker selbst wäre dies wahrscheinlich in der ValidateExtraHost-Funktion von opts/hosts.go möglich, obwohl sie dann nicht mehr streng validiert wird, sodass die Funktion etwas falsch benannt wäre.

Es ist möglicherweise sogar besser, dies zu docker hinzuzufügen, nicht docker-compose - docker-compose ruft es möglicherweise nur automatisch ab, wenn docker es erhält.

Leider würde dies wahrscheinlich ein Container-Bounce erfordern, um eine IP-Adresse zu ändern.

0
dstromberg