Saltar a contenido

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.service aparece como masked o inactive
  • docker: Cannot connect to the Docker daemon al 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

docker version
docker compose version
docker run hello-world

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:

sudo usermod -aG docker $USER
# Cierra sesión y vuelve a entrar

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:

sudo systemctl start docker
ls -la /var/run/docker.sock

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