Impossible d'écrire dans le fichier / etc / hosts à partir de Dockerfile avec RUN

9

Je fais une image de docker en utilisant un Dockerfile assez simple. Dans le Dockerfile, j'ai cette commande:

RUN printf "192.92.13.243 www.hahaha.com \n" >> /etc/hosts

La commande elle-même semble être correcte, car la création de l'image ne s'arrête pas à ce stade.

Le problème est le suivant: lors de l'exécution de l'image, la ligne qui est censée avoir été insérée dans "/ etc / hosts" n'est pas là.

Maintenant, j'ai cherché et découvert qu'avant la version 1.2 de docker, il y avait un problème avec le fichier hosts à l'intérieur des conteneurs. Dans mon cas, j'utilise la version 1.5, la dernière en date.

Suis-je en train de manquer quelque chose?

MISE À JOUR 1:

Il semble y avoir beaucoup de problèmes à ce sujet, à la fois ouverts et fermés, dans les pages github de docker.

dlyk1988
la source

Réponses:

12

Cela fonctionne sur docker 1.7.0

RUN echo "192.168.11.112 myhost" >> /etc/hosts && wget http://myhost

L'astuce consiste à ajouter le nom d'hôte sur la même ligne que vous l'utilisez, sinon le fichier hosts sera réinitialisé, car chaque commande RUN démarre un nouveau conteneur intermédiaire. Par exemple, cela ne fonctionnera pas :

RUN echo "192.168.11.112 myhost" >> /etc/hosts
RUN wget http://myhost
Jonatan
la source
1
Merci pour la perspicacité! Bien que correct (j'ai vérifié) et utile en général, il ne me sert à rien dans ce cas. J'ai besoin que le fichier "hosts" soit rempli lors de l'exécution du conteneur.
dlyk1988
2
+1 pour l'exécution de commandes sur la même ligne
myol
7

Après avoir écrit la mise à jour de ma question, j'ai décidé d'examiner de plus près les "problèmes" ouverts dans github. Il s'avère qu'une solution de contournement a été mise en œuvre:

docker run ... --add-host='server:0.0.0.0' ...

En utilisant l'argument "--add-host ..." lors du démarrage d'un conteneur, il est possible de modifier le fichier hosts.

dlyk1988
la source
5
Je veux cependant pouvoir le faire en build. La personne qui exécute le conteneur ne devrait pas avoir à connaître les hôtes internes. Ça n'a aucun sens!
samsamm777
J'écho @ samsamm777. Vous vous demandez s'il existe un bon moyen de le faire?
Jonathan
C'est vraiment un comportement très surprenant, qui n'est jamais une bonne idée dans les systèmes informatiques.
Torsten Bronger