J'utilise docker-compose
pour exécuter un environnement de test composé d'environ 5 conteneurs différents. Les liens inter-conteneurs et les volumes partagés (volumes-from) fonctionnent à merveille. J'expose également certains ports jusqu'à la machine hôte, ce qui fonctionne bien.
Ce qui me manque, c'est un moyen de lier certains de mes vrais serveurs dans cet environnement, sans coder en dur l'adresse IP. Avec docker run
, vous pouvez utiliser --add-Host
pour ajouter une autre ligne dans votre /etc/hosts
fichier. Existe-t-il un moyen de faire quelque chose de similaire avec docker-compose?
J'ai une bonne nouvelle: ce sera dans Compose 1.3!
Je l'utilise dans la RC actuelle (RC1) comme ceci:
rng:
build: rng
extra_hosts:
seed: 1.2.3.4
tree: 4.3.2.1
https://docs.docker.com/compose/compose-file/#extra_hosts
extra_hosts - Ajoute des mappages de noms d'hôte. Utilise les mêmes valeurs que le paramètre client -add-Host de docker.
extra_hosts: - "somehost:162.242.195.82" - "otherhost:50.31.209.229"
Une entrée avec l'adresse ip et le nom d'hôte sera créée dans/etc/hosts> à l'intérieur des conteneurs pour ce service, par exemple:
162.242.195.82 somehost 50.31.209.229 otherhost
Cela fait partie du carnet de fonctionnalités de Compose, mais il ne semble pas que le travail ait déjà été commencé. question de Github.
Il semble qu'il devrait être possible de dire:
extra_hosts:
- "loghost:localhost"
Donc, si la partie après les deux points (normalement une adresse IP) ne commence pas par un chiffre, la résolution du nom sera exécutée pour rechercher une adresse IP pour localhost et ajouter un élément similaire à/etc/hosts du conteneur:
127.0.0.1 loghost
... en supposant que localhost soit résolu en 127.0.0.1 sur le système hôte.
Il semblerait qu'il serait très facile d'ajouter du code source dans docker-compose: la fonction parse_extra_hosts de compose/config/types.py le ferait probablement.
Pour docker lui-même, cela pourrait probablement être ajouté dans la fonction ValidateExtraHost de opts/hosts.go, bien que ce ne soit plus une validation stricte, la fonction serait donc un peu mal nommée.
En fait, il serait peut-être préférable d’ajouter ceci à docker, et non à docker-compose - docker-compose pourrait l’obtenir automatiquement si docker l’obtient.
Malheureusement, cela nécessiterait probablement un rebond de conteneur pour changer une adresse IP.