Al actualizar algunos contenedores LXC en los que mantenía algún despliegue con Docker he acabado encontrando este tipo de error:
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: failed to add interface veth52242e7 to sandbox: error setting interface «veth52242e7» IPv6 to <nil>: failed to configure ipv6: failed to disable IPv6 on container’s interface eth0, set env var DOCKER_ALLOW_IPV6_ON_IPV4_INTERFACE=1 to ignore this error: unknown
Error: failed to start containers: 89fze5ea9d64
Debido a que en LXC el sistema de ficheros es de sólo lectura en «/proc/sys/net» se necesita aplicar una variable de entorno en la sección «Service» del fichero que inicia Docker «/etc/systemd/system/multi-user.target.wants/docker.service»:
[Service]
Environment=»DOCKER_ALLOW_IPV6_ON_IPV4_INTERFACE=1″
Tras actualizar el software de OpenSuse Tumbleweed me he encontrado con el siguiente error al intentar iniciar los contenedores LXC:
libvirtError: error interno: No se pudo encontrar montaje de controlador de memoria cgroups
Supongo que debe estar relacionado con la actualización de software LXC más que con el kernel, porque volver a la versión anterior no lo resolvía. Sin embargo, lo que sí lo resolvía era añadir los siguientes parámetros en el inicio del kernel:
cgroup_enable=memory systemd.unified_cgroup_hierarchy=0
Y se puede comprobar cómo cambia el resultado al ejecutar este comando antes y después:
cat /proc/cgroups | column -t
mount | grep cgroup
Supuestamente, el tenerlo activado nos permite controlar y limitar el acceso a los recursos de la máquina host por parte de los guest, con lo que no entiendo si está hecho a posta porque han habido cambios que ya no necesitan estos parámetros y lo implementan de otra forma o es un simple fallo en la última versión.
ACTUALIZACIÓN
Tres posibles soluciones a este problema en openSUSE Tumbleweed:
- Ejecutar lo siguiente:
- sudo systemctl stop virtlxcd
- sudo virtlxcd -f /etc/libvirt/virtlxcd.conf -d
- Cambiar el fichero «/etc/systemd/system.conf.d/80-defaults.conf» para que tenga lo siguiente:
- [Manager]
DefaultMemoryAccounting=yes
- Realizar la isntalación de cockpit con podman:
zypper install patterns-microos-cockpit cockpit cockpit-bridge cockpit-kdump cockpit-machines cockpit-networkmanager cockpit-packagekit cockpit-pcp cockpit-podman cockpit-storaged cockpit-system cockpit-ws
systemctl enable –now cockpit.socket
systemctl restart cockpit.socket
Acceder a https://ip:9090 y clicar en «Limited access» para obtener permisos de administración. En la sección de «Podman containers» no saldrá un mensaje para que habilitemos los servicios de podamn, el cual aceptaremos y ya está.
Si estamos trabajando con Libvirt y deseamos realizar una actualización de sistemas de forma prácticamente desatendida, este es un script que puede resultar cómodo:
#!/bin/bash
## Recoge el nombre de los contenedores y elimina la primera línea y la última
lxc_names=»$(virsh -d 0 -c lxc:/// list –name | tail -n +2 | head -n -1)»
update_lxc_machines(){
local lxc=»$1″
virsh -c lxc:/// lxc-enter-namespace «$lxc» –noseclabel /bin/apt -qq update
virsh -c lxc:/// lxc-enter-namespace «$lxc» –noseclabel /bin/apt -qq -y upgrade
virsh -c lxc:/// lxc-enter-namespace «$lxc» –noseclabel /bin/apt -qq -y clean
virsh -c lxc:/// lxc-enter-namespace «$lxc» –noseclabel /bin/apt -qq -y autoclean
}
for lxc_name in $lxc_names
do
update_lxc_machines «$lxc_name»
done
He tomado como referencia este otro script y lo he modificado a mis necesidades.
Últimos Comentarios