Je souhaite mettre à jour mon fichier /etc/hosts
pendant la "construction du menu fixe".
J'ai ajouté la ligne ci-dessous dans Dockerfile mais il ne s'agit ni de mettre à jour le fichier /etc/hosts
ni de donner d'erreur.
RUN echo "192.168.33.11 mynginx" >> /etc/hosts
J'ai besoin de mettre à jour /etc/hosts
. Quelqu'un peut-il suggérer à ce sujet?
Avec une version plus récente de docker, cela pourrait être fait avec docker-compose et sa directive extra_hosts
Ajoutez des mappages de noms d'hôte.
Utilisez les mêmes valeurs que le paramètredocker run
_ CLIENT _--add-Host
(qui devrait déjà être disponible pour le menu fixe 1.8).
_extra_hosts:
- "somehost:162.242.195.82"
- "otherhost:50.31.209.229"
_
En bref: modifiez _/etc/hosts
_ de votre conteneur lors de son exécution, sans le générer.
Avec Docker 17.x +, vous avez docker build --add-Host
mentionné ci-dessous , mais, comme indiqué dans numéro 34078 et dans cette réponse :
La fonctionnalité _
--add-Host
_ au cours de la génération est conçue pour permettre de remplacer un hôte pendant la construction, sans toutefois conserver cette configuration dans l'image.
Les solutions mentionnées font référence au docker-compos que je proposais ci-dessus:
- Exécuter un DNS interne; vous pouvez définir le serveur DNS par défaut à utiliser dans le démon; de cette façon, chaque conteneur démarré utilisera automatiquement le DNS configuré par défaut
- Utilisez docker compose et fournissez un _
docker-compose.yml
_ à vos développeurs.
Le fichier de composition de docker vous permet de spécifier toutes les options devant être utilisées lors du démarrage d’un conteneur. Les développeurs peuvent donc simplement docker composer pour démarrer le conteneur avec toutes les options qu’ils doivent définir.
Vous ne pouvez pas modifier le fichier hôte dans l'image à l'aide de l'étape echo
de RUN
, car le démon docker conserve le fichier (/ etc/hosts) et son contenu (entrée hosts) lorsque vous démarrez un conteneur à partir du image.
Toutefois, les éléments suivants peuvent être utilisés pour atteindre le même objectif:
ENTRYPOINT ["/bin/sh", "-c" , "echo 192.168.254.10 database-server >> /etc/hosts && echo 192.168.239.62 redis-ms-server >> /etc/hosts && exec Java -jar ./botblocker.jar " ]
La clé à noter ici est l’utilisation de la commande exec
comme le suggère la documentation de docker. L'utilisation de exec transformera la commande Java en PID 1 pour le conteneur. . Les interruptions de Docker ne feront que répondre à cela.
Voir https://docs.docker.com/engine/reference/builder/#entrypoint
Je pense que docker a récemment ajouté le drapeau --add-Host
à la construction de docker, ce qui est vraiment génial.
[Edit] Cette fonctionnalité a donc été mise à jour le 17.04.0-ce
Pour plus de détails sur l'utilisation de docker build
avec le drapeau --add-Host
, veuillez visiter: https://docs.docker.com/Edge/engine/reference/commandline/build/
Comme cela reste une première réponse dans Google, je proposerai une solution possible.
La commande prise de ici a étonnamment fonctionné pour moi (Docker 1.13.1, Ubuntu 16.04):
docker exec -u 0 <container-name> /bin/sh -c "echo '<ip> <name> >> /etc/hosts"
Si cela est utile pour quiconque, la variable HOSTALIASES
env a fonctionné pour moi:
echo "fakehost realhost" > /etc/Host.aliases
export HOSTALIASES=/etc/Host.aliases
Vous pouvez le faire avec la commande suivante au moment de l'exécution du menu fixe
docker run [OPTIONS] <your-image-name>:<your tag> --add-Host example.com:127.0.0.1
Ici, je mappe example.com
à localhost 127.0.0.1
et à son fonctionnement.
J'utilise AWS Elasticbeanstalk + Docker + Supervisord.
Ajoutez simplement du code dans Dockerfile
.
CMD echo 123.123.123.123 this_is_my.Host >> /etc/hosts; supervisord -n;
Tis is me Dockefile
FROM XXXXX
ENV DNS_1="10.0.0.1 TEST1.COM"
ENV DNS_1="10.0.0.1 TEST2.COM"
CMD ["bash","change_hosts.sh"]`
#cat change_hosts.sh
su - root -c "env | grep DNS | akw -F "=" '{print $2}' >> /etc/hosts"