J'ai un scénario très spécial. Une machine virtuelle contenant des conteneurs docker. Un de ces conteneurs doit connaître l'adresse IP de l'hôte. Le problème est que si je passe l'IP de l'hôte sur la construction du conteneur ou en utilisant la commande -e
sur docker, elle reste "statique" (toujours la même, celle de ce moment) sur le conteneur. Ce vm peut être sur un ordinateur portable et l'ordinateur portable se déplace à partir de différents réseaux et l'ip de l'hôte vm peut être différent à chaque redémarrage.Docker. Ajouter l'hôte dynamique à env var sur le conteneur
Ce conteneur spécial a le --restart=always
et n'est pas construit ou "docker run" à nouveau ... une seule fois. Et comme je l'ai dit, j'ai besoin de l'IP de l'hôte à chaque redémarrage pour configurer le service dans le conteneur sur son entrypoint car le conteneur a un serveur bind dns qui doit charger une zone avec des entrées DNS qui doivent pointer sur lui-même). Un environnement var serait génial si possible. Ce sont mes données:
- Le "normal" Lauch
La fin de mon Dockerfile:
....
....
ENTRYPOINT ["/etc/bind/entrypoint.sh"]
CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]
fichier Entrypoint (l'expression régulière fonctionne très bien si le var pourrait avoir la bonne valeur):
#!/bin/bash
sed -ri "s/IN A.*/IN A $HOSTIP/" /etc/bind/db.my.zone
exec "[email protected]"
Docker run cmd:
docker run --name myContainer -d --restart=always -p 53:53 -p 53:53/udp myImage
- Ce que j'essayé:
Je suppose que le point d'entrée est correct et ne devrait pas être modifié si je peux fournir un var à la juste valeur.
Si je mets un -e
sur ordre de marche docker, il est « hardcoded » pour toujours avec la même adresse IP toujours même si l'hôte est sur différents réseaux:
docker run -e HOSTIP=$(ifconfig eth0 | grep netmask | awk '{print $2}') --name myContainer \
-d --restart=always -p 53:53 -p 53:53/udp myImage
J'ai essayé de modifier sans succès aussi le CMD sur Dockerfile :
CMD (export HOSTIP=$(ifconfig eth0 | grep netmask | awk '{print $2}'));/usr/sbin/named -g -c /etc/bind/named.conf -u bind
Est-il possible de réaliser quelque chose comme ça? Merci.
Je l'ai mis à jour parce qu'il m'a donné l'idée, en mappant un fichier de volume. Votre méthode '/ proc/net/tcp' n'a pas fonctionné pour moi, mais votre idée est bonne. Je posterai ma solution. Je vous remercie. – OscarAkaElvis