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.

31
demandé sur Thomasleveil 2015-08-18 20:51:27

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/

42
répondu d3ming 2018-01-05 22:40:01

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/

7
répondu Vintesh 2016-12-13 21:57:31

Ajouter à votre commande exécuter -v /etc/hosts:/etc/hosts

5
répondu user2915097 2015-08-18 18:13:40

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.

1
répondu marcolz 2018-06-14 12:30:21

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

0
répondu user3379574 2016-03-02 15:03:35

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 :

  1. 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.
  2. 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.
0
répondu Mohit Gupta 2017-08-27 13:32:21

Si vous utilisez docker-compose.yml, la propriété correspondante est:

services:
  xxx:
    network_mode: "host"

Source

0
répondu 1615903 2018-03-22 11:57:05