Comment obtenir l'adresse IP du conteneur dans ce conteneur?
'docker inspect $ hostname ...' ne convient pas, car je ne partage pas le fichier /var/run/docker.sock avec le fichier hôte.
Comme l'adresse IP est dans la première ligne de/etc/hosts, vous pouvez utiliser dans un conteneur la commande awk qui affiche le premier mot de la première ligne de/etc/hosts
gg@805689be5f47:/$ awk 'END{print $1}' /etc/hosts
172.17.0.14
Je peux trouver l'adresse IP avec
hostname -i
Bien sûr, cela peut ne pas être tout à fait exact s'il y a plus d'une interface.
Modifier
Remarque: Selon la page de manuel hostname, hostname -i
utilise DNS pour résoudre l'adresse IP, où hostname -I
affiche toutes les adresses, sauf le bouclage, ne dépend pas du DNS et est recommandé.
-i
et -I
renvoient les mêmes résultats dans tous mes conteneurs Docker (mais ce n'est pas le cas sur mon bureau).
Pourquoi pas quelque chose d'aussi simple que:
grep "`hostname`" /etc/hosts|awk '{print $1}'
ou
grep "$HOSTNAME" /etc/hosts|awk '{print $1}'
Normalement, vous pouvez utiliser le programme linux ifconfig
pour obtenir les adresses IP et d’autres détails relatifs au réseau. Votre conteneur ne l’a peut-être pas, auquel cas vous devrez l’installer via apt-get
ou yum
ou le gestionnaire de paquets de votre distribution. Un pipeline de base pour obtenir l'adresse IP serait
ifconfig eth0 | grep "inet addr:" | cut -d : -f 2 | cut -d " " -f 1
J'ai trouvé une solution à mon problème:
/sbin/ip route|awk '/scope/ { print $9 }'
C'est imprimer quelque chose comme: '172.17.0.135'
Si vous préférez utiliser ip
plutôt que ifconfig
, vous pouvez sous Linux:
ip addr | grep inet | tr -s ' ' | cut -d ' ' -f 3
Ceci obtient simplement tous des adresses IP et des interfaces, recherche uniquement celles commençant par inet
et ne renvoie que la 3ème colonne.
Comme effet secondaire, cela inclut également le masque de sous-réseau! (par exemple, 172.17.0.2/16
)
Si vous ne voulez pas le masque de sous-réseau, vous pouvez utiliser:
ip addr | grep inet | tr -s ' ' | cut -d ' ' -f 3 | tr -d '/'
REMARQUE: Ceci afficheTOUSdes adresses IP du conteneur. Vous pouvez utiliser awk
ou sed
pour supprimer 127.0.0.1/16
et les autres adresses IP indésirables. :)
Vous pouvez également rechercher une ligne dans/etc/hosts qui se termine par un identifiant de conteneur et imprimer le premier champ:
sed -n 's/^\([0-9\.]*\)[[:blank:]]*[0-9a-f]\{12,\}$/\1/p' /etc/hosts
J'utiliserais awk, mais awk standard dans dedian: jessie ne prend pas en charge les quantificateurs de regex tels que {12,}
.