Para instalar Docker en MX Linux o en cualquier distribución que no utilice systemd (como aquellas basadas en sysvinit u OpenRC), debemos abordar dos desafíos: la instalación de los binarios y, lo más importante, la gestión del demonio dockerd mediante los scripts de inicio tradicionales.

Te guiaré a través de este proceso siguiendo la filosofía KISS y asegurando la estabilidad del sistema.
1. Identificación del entorno y preparación
MX Linux, por defecto, utiliza sysvinit (aunque tiene fragmentos de systemd para compatibilidad, no lo usa como PID 1). Por tanto, no podemos usar systemctl.
Aviso de Seguridad: La manipulación de repositorios y la ejecución de Docker requieren privilegios de root. Asegúrate de entender cada comando antes de ejecutarlo.
Actualización de repositorios de apt
sudo apt update && sudo apt upgrade -y
2. Instalación de Docker (Método estándar)
Aunque no usemos systemd, los paquetes de Docker en los repositorios de Debian (base de MX Linux) suelen ser compatibles, pero necesitamos instalar las dependencias de gestión de certificados y transporte.
apt-transport-https: Permite que el gestor de paquetes descargue metadatos y paquetes a través de HTTPS.ca-certificates: Permite al sistema verificar la validez de los certificados de seguridad de los servidores de Docker.curl: Herramienta de transferencia de datos que usaremos para descargar la llave de cifrado.gnupg: Suite de cifrado para manejar las llaves públicas del repositorio.
sudo apt install apt-transport-https ca-certificates curl gnupg lsb-release -y
Añadir la llave GPG oficial de Docker:
No instalamos software de cualquier sitio. Necesitamos la llave GPG oficial de Docker para que el sistema confíe en los paquetes descargados.
gpg --dearmor: Convierte la llave descargada (que suele venir en formato de texto ASCII) a un formato binario queaptpuede procesar rápidamente.
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
Configurar el repositorio:
Docker no suele estar en su versión más reciente en los repositorios «main» de Debian. Añadimos el repositorio oficial de Docker indicando la arquitectura de tu CPU y la versión de tu sistema.
dpkg --print-architecture: Detecta automáticamente si tu sistema es de 64 bits (amd64) o ARM.lsb_release -cs: Devuelve el nombre en clave de la base de tu sistema (ej. «bookworm» o «bullseye»).tee: Escribe a un fichero a la vez que muestra por pantalla la salida del comando anterior
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Instalar el motor Docker:
Ahora instalamos los componentes fundamentales:
containerd.io: El demonio que gestiona el ciclo de vida de los contenedores a bajo nivel.docker-ce: El motor principal (Community Edition).docker-ce-cli: La interfaz de comandos para que nosotros podamos escribirdocker ps, etc.
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
3. Gestión de Docker sin systemd (El principal problema)
En un sistema sin systemd, el comando sudo systemctl start docker fallará. En su lugar, utilizaremos el sistema de scripts de /etc/init.d/.
Paso A: Verificar el script de inicio
MX Linux suele incluir scripts de compatibilidad. Verifica si existe:
ls -l /etc/init.d/docker
Paso B: Iniciar el servicio manualmente
Usamos scripts de inicio situados en /etc/init.d/.
service docker start: Es un «wrapper» o envoltorio que busca el script en/etc/init.d/y lo ejecuta para levantar el demonio de Docker.
# Iniciar el servicio
sudo service docker start
# O mediante el script directamente
sudo /etc/init.d/docker start
Paso C: Configurar el arranque automático
Para asegurarnos de que Docker inicie al encender la máquina en sistemas sysvinit:
update-rc.d: Este comando es crítico. Crea los enlaces simbólicos necesarios para que, cuando el ordenador pase por los niveles de ejecución (runlevels) al encenderse, Docker sepa que debe arrancar automáticamente.
sudo update-rc.d docker defaults
(Si usaras OpenRC (como en Gentoo o Artix), el comando sería rc-update add docker default).
4. Configuración de Permisos (Post-instalación)
Por seguridad, el socket de Docker pertenece al usuario root. Para no tener que escribir sudo constantemente (lo cual es una mala práctica de seguridad dentro de los flujos de trabajo), añadimos nuestro usuario al grupo docker.
usermod -aG: Te explico las opciones por partes; -a añade (append) el grupo al usuario sin quitarle los que ya tiene. -G especifica el grupo de destino.
sudo usermod -aG docker $USER
Nota: Debes cerrar sesión y volver a entrar para que los cambios surtan efecto.
5. Verificación y solución de problemas
Para confirmar que todo funciona correctamente, ejecutamos el contenedor de prueba:
docker run: Comando que combinapull(descargar),create(crear) ystart(iniciar).
docker run hello-world
El Problema: El conflicto de los cgroups
Docker depende de los Control Groups (cgroups) para limitar y aislar el uso de CPU, memoria y E/S de los contenedores.
- En systemd: El propio systemd se encarga de montar y gestionar
/sys/fs/cgroup. - En SysVinit/OpenRC: No hay un gestor centralizado que lo haga automáticamente de la forma que Docker (diseñado modernamente para systemd) espera.
Necesitas instervenir si al intentar arrancar un contenedor ves un error como:
mountpoint for devices not found o cgroups: cannot find cgroup mountpoint,
Solución 1: Instalación de la utilidad de montaje
La forma más «limpia» y KISS es instalar un paquete que se encarga específicamente de preparar estos puntos de montaje antes de que Docker arranque.
cgroupfs-mount: Es un script que detecta qué controladores de cgroup están disponibles en el kernel y los monta en/sys/fs/cgroup.
# Instalamos la utilidad
sudo apt update
sudo apt install cgroupfs-mount -y
# Iniciamos el servicio de montaje
sudo service cgroupfs-mount start
# Indicamos que inicie siempre al arrancar
sudo update-rc.d cgroupfs-mount defaults
# Iniciamos Docker para que detecte el cambio
sudo service docker restart
sleep 2
sudo docker version
Solución 2: El script cgroup-bin
Si por alguna razón cgroupfs-mount no está disponible en tus repositorios, existe una alternativa más robusta.
cgroup-tools: Proporciona herramientas para gestionar cgroups manualmente, pero suele incluir los scripts necesarios para el arranque.
sudo apt install cgroup-tools -y
Análisis de Logs en sistemas sin systemd:
Al no tener journalctl, debemos recurrir a los logs tradicionales para diagnosticar fallos de red o de montaje de capas:
- Log de Docker: Generalmente en
/var/log/docker.logo a través de los mensajes del sistema. - Comando de diagnóstico:
tail -f /var/log/messages
Consejo de Senior: En MX Linux, puedes usar la herramienta gráfica MX Service Manager para habilitar/deshabilitar el demonio de Docker de forma sencilla si prefieres evitar la terminal para la gestión diaria de servicios.
