web-dev-qa-db-fra.com

Comment 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 de menu fixe que je crée utilise les mêmes paramètres /etc/hosts que sur la machine hôte à partir de laquelle je suis exécuté. Y a-t-il un moyen de faire cela?

Je sais qu'il existe une option --add-Host avec l'exécution de docker, mais ce n'est pas exactement ce que je veux, car le fichier /etc/hosts de l'ordinateur hôte peut être différent sur différentes machines; il n'est donc pas pratique pour moi de coder en dur l'adresse exacte/hôtes avec --add-Host.

34
d3ming

Utilisez --network=Host dans la commande d'exécution du menu fixe. Cela indique à Docker de faire en sorte que le conteneur utilise la pile réseau de l'hôte. Vous pouvez en apprendre plus ici: https://docs.docker.com/engine/userguide/networking/

46
d3ming

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/

8
Vintesh

Ajouter à votre commande d'exécution -v /etc/hosts:/etc/hosts

4
user2915097

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.

3
marcolz

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

services:
  xxx:
    network_mode: "Host"

La source

1
1615903

IMO, passer l'option --network=Host lors de l'exécution du menu fixe est une meilleure option suggérée par d3ming par rapport aux autres options suggérées par d'autres réponses:

  1. Tout changement dans le fichier/etc/hosts de l'hôte est immédiatement disponible pour Conteneur, ce que vous voudrez probablement si vous avez une telle exigence Au départ.
  2. Ce n'est probablement pas une bonne idée d'utiliser l'option -v pour monter le fichier/etc/hosts de l'hôte, car toute modification non intentionnelle par conteneur gâcherait la configuration des hôtes.
0
Mohit Gupta

Si vous exécutez une machine virtuelle pour exécuter des conteneurs docker, s’il existe des hôtes (machines virtuelles, etc.) que vous souhaitez que vos conteneurs connaissent, en fonction du logiciel VM que vous utilisez, vous devez vous assurer que sont des entrées sur la machine hôte (hébergeant la machine virtuelle) pour les machines que vous souhaitez que les conteneurs soient en mesure de résoudre. Cela est dû au fait que VM et ses conteneurs ont l'adresse IP de la machine hôte (des machines virtuelles) dans leur resolv.conf.

0
user3379574