Comment Pouvez-vous faire en sorte que le conteneur Docker utilise le fichier /etc/hosts de la machine hôte?
Je veux faire en sorte que le conteneur docker que je tourne utilise les mêmes paramètres /etc/hosts
que sur la machine hôte à partir de laquelle je cours. Est-il un moyen de faire cela?
Je sais qu'il y a un --add-host
option avec docker run mais ce n'est pas exactement ce que je veux parce que le fichier /etc/hosts
de la machine hôte peut être différent sur différentes machines, donc ce n'est pas génial pour moi de coder en dur IP/hosts exact avec --add-host
.
7 réponses
Utilisez --network=host
dans la commande docker run. Cela indique à Docker de faire en sorte que le conteneur utilise la pile réseau de l'hôte. Vous pouvez en savoir plus ici: https://docs.docker.com/engine/userguide/networking/
Ajouter un fichier hôte standard -
docker run -it ubuntu cat /etc/hosts
Ajouter un mappage pour le serveur 'foo' -
docker run -it --add-host foo:10.0.0.3 ubuntu cat /etc/hosts
Ajouter des mappages pour plusieurs serveurs
docker run -it --add-host foo:10.0.0.3 --add-host bar:10.7.3.21 ubuntu cat /etc/hosts
Référence - http://jasani.org/2014/11/19/docker-now-supports-adding-host-mappings/
Ajouter à votre commande exécuter -v /etc/hosts:/etc/hosts
Si des utilisateurs de confiance démarrent vos conteneurs, vous pouvez utiliser une fonction shell pour "copier" facilement les entrées /etc/hosts
dont vous avez besoin:
add_host_opt() { awk "/\\<${1}\\>/ {print \"--add-host $1:\" \$1}" /etc/hosts; }
Vous pouvez alors faire:
docker run $(add_host_opt host.name) ubuntu cat /etc/hosts
De cette façon, vous n'avez pas à coder en dur les adresses IP.
Si vous exécutez une machine virtuelle pour exécuter des conteneurs docker, s'il y a des hôtes (VMs, etc) dont vous voulez que vos conteneurs soient conscients, en fonction du logiciel de VM que vous utilisez, vous devrez vous assurer qu'il y a des entrées sur la machine hôte (hébergeant la VM) pour les machines que vous voulez que les conteneurs C'est parce que la machine virtuelle et ses conteneurs auront L'adresse IP de la machine hôte (des machines virtuelles) dans leur résolution.conf
OMI, en passant --network=host
option lors de l'exécution du panneau est une meilleure option comme suggéré par d3ming
sur d'autres options comme suggéré par d'autres réponses :
- tout changement dans /etc/hosts de l'hôte est immédiatement disponible pour conteneur, qui est ce que vous voulez probablement si vous avez un tel exigence à la première place.
- ce n'est probablement pas une bonne idée d'utiliser l'option-v pour monter les hôtes /etc/hosts car tout changement involontaire par conteneur gâchera la configuration des hôtes.