puertos - ¿Puedo obtener una dirección IP dentro de mi contenedor de docker?
ver dockers activos (6)
Normalmente puede usar el programa de Linux ifconfig
para obtener direcciones IP y otros detalles de red. Es posible que su contenedor no lo tenga, en cuyo caso deberá instalarlo a través de apt-get
o yum
o del administrador de paquetes de su distribución. Una tubería básica para obtener la dirección IP sería
ifconfig eth0 | grep "inet addr:" | cut -d : -f 2 | cut -d " " -f 1
¿Cómo obtener la dirección IP del contenedor dentro de este contenedor?
''docker inspeccionar $ hostname ...'' no es adecuado, porque no comparto /var/run/docker.sock host file al contenedor.
Encontré solución a mi problema:
/sbin/ip route|awk ''/scope/ { print $9 }''
Es imprimir algo como: ''172.17.0.135''
También puede buscar una línea en / etc / hosts que termine con un identificador de contenedor e imprima el primer campo:
sed -n ''s/^/([0-9/.]*/)[[:blank:]]*[0-9a-f]/{12,/}$//1/p'' /etc/hosts
Usaría awk, pero awk estándar en dedian: jessie no admite cuantificadores de expresiones regulares como {12,}
.
Como la dirección IP está en la primera línea de / etc / hosts, puede hacer en un contenedor el comando awk que imprime la primera palabra de la primera línea de / etc / hosts
gg@805689be5f47:/$ awk ''END{print $1}'' /etc/hosts 172.17.0.14
Puedo encontrar la dirección IP con
hostname -i
Por supuesto, eso puede no ser completamente exacto si hay más de una interfaz.
Editar
Nota: Según la página man del nombre de hostname -i
, el hostname -i
usa DNS para resolver la dirección IP, donde el hostname -I
muestra todas las direcciones, excepto el bucle invertido, no depende de DNS, y se recomienda.
En todos mis contenedores Docker, -i
y -I
devuelvo los mismos resultados (pero este no es el caso en mi escritorio).
¿Por qué no algo tan simple como:
grep "`hostname`" /etc/hosts|awk ''{print $1}''
o
grep "$HOSTNAME" /etc/hosts|awk ''{print $1}''