Verwenden von --add-host oder extra_hosts mit Docker-Compose

76

Ich verwende docker-compose, um eine Testumgebung auszuführen, die aus ungefähr 5 verschiedenen Containern besteht. Die Intercontainer-Links und die gemeinsam genutzten Volumes (Volumes von) funktionieren wunderbar. Ich lege auch einige Ports für den Host-Computer frei, was gut funktioniert.

Was mir fehlt, ist eine Möglichkeit, einige meiner realen Server mit dieser Umgebung zu verbinden, ohne die IP-Adresse fest zu codieren. Mit docker runkönnen Sie --add-hosteine weitere Zeile in Ihre /etc/hostsDatei einfügen. Gibt es eine Möglichkeit, mit Docker-Compose etwas Ähnliches zu tun?

Pieter
quelle

Antworten:

90

Ich habe gute Neuigkeiten: Dies wird in Compose 1.3 sein!

Ich benutze es im aktuellen RC (RC1) wie folgt:

rng:
  build: rng
  extra_hosts:
    seed: 1.2.3.4
    tree: 4.3.2.1
jpetazzo
quelle
3
Wenn jemand dies als Fehler ansieht und nicht unterstützte Konfigurationsanweisung "extra-hosts" sagt, ist es nicht "extra-hosts", sondern "extra_hosts".
Prasanth
71

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

extra_hosts - Hostnamenzuordnungen hinzufügen . Verwendet dieselben Werte wie der Parameter --add-host des Docker-Clients.

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.

162.242.195.82  somehost
50.31.209.229   otherhost
oneklc
quelle
11
Wird beim Build nicht unterstützt
vertriebener
1
Die Verbindung scheint unterbrochen zu sein. Hier ist die richtige: docs.docker.com/compose/compose-file/#extra_hosts
Pablo Torrecilla
1
Wie kann ich einem Container-Alias ​​einen externen Namen (keine IP) zuordnen?
Adriano dos Santos Fernandes
Du meinst einen Hostnamen setzen? -h HOSTNAME docs.docker.com/engine/userguide/networking/default_network/… Oder verwenden Sie einen Alias ​​in docker-compose: docs.docker.com/compose/compose-file/#aliases
oneklc
5

Basic docker-compose.ymlmit zusätzlichen Hosts:

version: '3'
services:
api:
    build: .
    ports:
        - "5003:5003"
    extra_hosts:
        - "your-host.name.com:162.242.195.82" #host and ip
        - "your-host--1.name.com your-host--2.name.com:50.31.209.229" #multiple hostnames with same ip
        

Der Inhalt der /etc/hostsDatei im erstellten Container:

162.242.195.82  your-host.name.com
50.31.209.229   your-host--1.name.com your-host--2.name.com

Sie können die /etc/hostsDatei mit den folgenden Befehlen überprüfen :

$ docker-compose -f path/to/file/docker-compose.yml run api bash  # 'api' is service name
#then inside container bash
root@f7c436910676:/app# cat /etc/hosts
Shubham
quelle
2

Es scheint möglich zu sein, zu sagen:

extra_hosts:
 - "loghost:localhost"

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

127.0.0.1 loghost

... unter der Annahme, dass localhost auf dem Hostsystem in 127.0.0.1 aufgelöst wird.

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

Für Docker selbst könnte dies wahrscheinlich in der ValidateExtraHost-Funktion von opts / hosts.go hinzugefügt werden, obwohl es dann nicht mehr streng validiert wird, sodass die Funktion ein wenig falsch benannt wäre.

Es könnte tatsächlich etwas besser sein, dies Docker hinzuzufügen, nicht Docker-Compose - Docker-Compose erhält es möglicherweise nur automatisch, wenn Docker es erhält.

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

Dstromberg
quelle
0

Dies befindet sich im Feature-Backlog für Compose, aber es sieht nicht so aus, als ob die Arbeit noch nicht begonnen hat. Github-Problem.

Kevan Ahlquist
quelle
4
Diese Antwort ist veraltet.
Tim Cooper