Docker en Elementary OS
Docker Desktop no arranca en Elementary OS porque usa una VM con QEMU/KVM para aislar el daemon, y depende de extensiones de GNOME Shell para el system tray. Elementary OS usa el entorno Pantheon, que no es compatible con esas extensiones.
La solución recomendada es Docker Engine: el daemon nativo de Linux, sin VM, más ligero, con arranque automático vía systemd y compatibilidad total con todos los docker compose de esta guía.
Diagnóstico rápido
Ejecuta estos comandos para confirmar el estado actual:
# ¿Está el servicio de Docker Desktop enmascarado?
systemctl --user status docker-desktop
# ¿Existe el daemon de Docker Engine?
systemctl status docker
# ¿Está el usuario en el grupo docker o kvm?
groups $USER
# ¿Qué versión de Docker responde el CLI?
docker version
Síntomas comunes del problema:
docker-desktop.serviceaparece comomaskedoinactivedocker: Cannot connect to the Docker daemonal ejecutar cualquier comando- Docker Desktop abre pero muestra error "starting the Docker Engine" en bucle
- La bandeja del sistema no muestra el ícono de Docker
Solución: Instalar Docker Engine
Docker Engine reemplaza completamente a Docker Desktop en Linux. Usa el mismo CLI (docker, docker compose) y es compatible con todos los docker-compose.yml de esta guía.
1. Desinstalar Docker Desktop (si está instalado)
sudo apt-get purge docker-desktop -y
rm -rf ~/.config/docker
rm -rf ~/.docker/desktop
rm -f ~/.local/share/applications/docker-desktop.desktop
Note
El CLI (docker-ce-cli), los plugins (docker-buildx-plugin, docker-compose-plugin) y las imágenes en /var/lib/docker no se eliminan. Solo se quita el paquete de escritorio.
2. Instalar el repositorio de Docker (si no está configurado)
Si ya seguiste la instalación de Docker Desktop en esta guía, el repositorio ya está configurado — salta al paso 3.
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$UBUNTU_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
3. Instalar Docker Engine
sudo apt-get install -y \
docker-ce \
docker-ce-cli \
containerd.io \
docker-buildx-plugin \
docker-compose-plugin
4. Configurar permisos y arranque automático
# Añadir tu usuario al grupo docker (evita usar sudo en cada comando)
sudo usermod -aG docker $USER
# Habilitar e iniciar el servicio
sudo systemctl enable --now docker
# Verificar que funciona
docker run hello-world
Cierra sesión y vuelve a entrar
El cambio de grupo (docker) no tiene efecto hasta que cierras sesión completamente y vuelves a entrar. Puedes aplicarlo en la sesión actual con newgrp docker, pero es un parche temporal.
5. Verificar instalación
Deberías ver algo como:
Client: Docker Engine - Community
Version: 29.x.x
Server: Docker Engine - Community
Engine:
Version: 29.x.x
¿Por qué Docker Engine y no Docker Desktop?
| Docker Desktop | Docker Engine | |
|---|---|---|
| Funcionamiento | VM con QEMU/KVM | Daemon nativo Linux |
| Compatibilidad Elementary | Problemática (Pantheon ≠ GNOME) | Total |
| Arranque automático | Requiere sesión gráfica abierta | systemd — arranca con el sistema |
| Rendimiento | Overhead de VM | Nativo, sin overhead |
| Recursos | ~2 GB RAM reservados para la VM | Solo lo que usen los contenedores |
| CLI y Compose | Idéntico | Idéntico |
| Kubernetes | Incluido (si lo necesitas) | No incluido |
Cuándo usar Docker Desktop
Solo si necesitas Kubernetes integrado o la UI gráfica. Para todo lo demás (contenedores, compose, desarrollo) Docker Engine es la opción correcta en Linux.
Troubleshooting
permission denied while trying to connect to the Docker daemon
El usuario no está en el grupo docker:
El servicio no arranca
# Ver los logs del daemon
sudo journalctl -u docker -n 50
# Reiniciar el servicio
sudo systemctl restart docker
# Verificar estado
sudo systemctl status docker
Cannot connect to the Docker daemon at unix:///var/run/docker.sock
El socket no existe o el servicio está caído:
Conflicto entre Docker Desktop y Docker Engine
Si tienes ambos instalados, el contexto activo puede apuntar al lugar equivocado:
# Ver contextos disponibles
docker context ls
# Usar el contexto de Docker Engine
docker context use default
Migración de contenedores existentes
Si tenías contenedores corriendo en Docker Desktop, al cambiar a Docker Engine los volúmenes con nombre (como n8n_data, portainer_data) se recrean vacíos — los datos estaban dentro de la VM.
Para exportar datos antes de migrar:
# Arrancar Docker Desktop temporalmente y exportar volumen
docker run --rm -v n8n_data:/data -v $(pwd):/backup alpine \
tar czf /backup/n8n_data_backup.tar.gz -C /data .
# Después de instalar Docker Engine, restaurar
docker run --rm -v n8n_data:/data -v $(pwd):/backup alpine \
tar xzf /backup/n8n_data_backup.tar.gz -C /data