web-dev-qa-db-fra.com

Puis-je obtenir une adresse IP dans mon conteneur Docker?

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.

26
Kroid

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

24
user2915097

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).

56
Victor Roetman

Pourquoi pas quelque chose d'aussi simple que:

grep "`hostname`" /etc/hosts|awk '{print $1}'

ou

grep "$HOSTNAME" /etc/hosts|awk '{print $1}'
4
Rafal

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
2
Peter Lyons

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'

1
Kroid

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. :)

0
XtraSimplicity

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,}.

0
Cole Tierney