He escrito algunos scripts para administrar contenedores LXC, y puedo obtener sus direcciones IP a través de ifconfig, suponiendo que estoy conectado a la consola.
Ahora quiero conectarme a estos contenedores a través de ssh. ¿Cómo obtengo su dirección IP de tal manera que pueda escribir un script? Tampoco quiero establecer las direcciones manualmente (pero lo haré, si esa es la única opción).
Hasta ahora, he intentado usar lxc-start
, pero la máquina no tiene una dirección IP antes de ejecutar /sbin/init
.
Respuestas:
La forma más fácil de hacer esto ahora es:
Esto devuelve la dirección IP sin otro texto.
La
-i
opción especifica que se debe devolver la dirección IP y la-H
opción deshabilita la salida legible por humanos, es decir, las etiquetas. Para obtener más información, consulte la página del comando man lxc-info .EDITAR para la versión más nueva de LXC:
lxc info container-name
Entonces obtienes información detallada. Mire el bloque "Ips:", que debería verse como el siguiente. Puede uno para tomar la primera dirección IPv4 (
10.121.48.241
) en este caso:fuente
Al ver que ejecutar cosas en contenedores no parece ser compatible con Ubuntu, mi siguiente mejor sugerencia es mirar los contratos de arrendamiento de direcciones IP que
dnsmasq
se están entregando. Eso es realmente simple:Solo hay dos partes que son útiles, por lo que podemos formatearlo mucho mejor:
fuente
lxc-ls --fancy
.dnsmasq.lxcbr0.leases
Técnicamente hablando, debería poder usar
lxc-attach
para conectarse y disparar un comando (y procesar la salida), así:Esto requiere que el contenedor se esté ejecutando.
Nota: No pude hacer que esto funcione. Instalé LXC y probé esto, pero solo vi un montón de errores de espacio de nombres, archivos faltantes y otras tonterías. Pero mi única experiencia con LXC son los 10 minutos que he dedicado a esta pregunta. Podría funcionar. Puede que no. ¡Buena suerte!
fuente
ifconfig eth0 | grep -Eo 'addr:[0-9.]+' | cut -d: -f2
si solo desea la dirección IP.No such file or directory - failed to open '/proc/28741/ns/pid'
yfailed to enter the namespace
. Encontré un error que describe el problema con precisión, pero es de 2010.Esto funciona en Ubuntu 14.04:
y si solo quieres la dirección IP (útil para scripts), (gracias @JulianHLam):
fuente
lxc-info -n $name -Hi
para obtener solo la IP sin espacios en blanco extranjerosO consulta dnsmasq (que proporciona IP a los contenedores)
fuente
Versión de Python para hacerlo:
fuente
El siguiente comando reemplaza el
lxc-attach
ejemplo en la publicación anteriorSe ejecuta
ifconfig
dentro del contenedor y muestra la salida.Parece que algo no está configurado correctamente. Como solución alternativa, he usado la plantilla de configuración predefinida proporcionada por la documentación de LXC para que funcione sin más investigación.
fuente
Si está ejecutando LXD, puede encontrar este comando útil para obtener la dirección IP de un contenedor en ejecución
fuente
sudo lxc-ls --fancy -F ipv4 $my_container_name | tail -1
fuente
Deja que dnsmasq lo haga por ti.
Configure la instancia dnsmasq de su máquina host para consultar la instancia dnsmasq de lxc para el dominio de nivel superior .lxc.
En / etc / default / lxc-net, descomente esta línea:
Si NetworkManager lanza la instancia dnsmasq de su host (como es el caso con la mayoría de las instalaciones de escritorio de Ubuntu actuales), cree un archivo llamado /etc/NetworkManager/dnsmasq.d/lxc.conf con esta línea dentro:
Si el dnsmasq de su host es lanzado por algo que no sea NetworkManager, agregue esa línea a /etc/dnsmasq.d-available/lxc en su lugar:
Luego reinicie las cosas para que recojan los cambios:
Es posible que deba reiniciar sus contenedores lxc o hacer que soliciten nuevas concesiones de DHCP antes de que aparezcan en DNS. (No recuerdo si fue necesario cuando hice esto). También vale la pena mencionar que vi un informe de error sobre lxc-net que no detectaba los cambios de dnsmasq cuando se reiniciaba, por lo que es posible que desee reiniciar su sistema host solo para estar seguro.
Entonces pruébalo:
fuente
La respuesta simple es
Si no recuerda el nombre_contenedor, simplemente escriba sudo lxc-ls -f.
fuente