Si alguna vez intentaste levantar un contenedor con docker-compose up -d y te apareció este error:
ERROR: for portainer Cannot start service portainer: AppArmor enabled on system but the docker-default profile could not be loaded
No te preocupes, es un problema común cuando ejecutas Docker dentro de entornos contenedorizados como LXC o Proxmox. Aquí te explico 3 formas de solucionarlo, desde la más rápida hasta la más permanente.
🔍 ¿Por qué ocurre este error?
Docker intenta cargar su perfil docker-default de AppArmor (un sistema de seguridad de Linux), pero el kernel del contenedor LXC no permite cargar perfiles nuevos. Esto genera el código de error exit status 185.
✅ Solución 1: Rápida (para un solo contenedor)
Añade security_opt en el servicio problemático de tu docker-compose.yml:
services:
portainer:
image: portainer/portainer-ce:latest
ports:
- "9443:9443"
security_opt:
- apparmor=unconfined # 👈 línea mágica
Luego reinicia:
docker-compose down
docker-compose up -d
Ventaja: Rápido y efectivo. Desventaja: Hay que hacerlo en cada contenedor.
✅ Solución 2: Para entornos LXC/Proxmox (recomendada)
Si tu Docker corre dentro de un contenedor LXC en Proxmox, esta es la mejor solución.
- Edita la configuración del contenedor LXC desde el host Proxmox:
nano /etc/pve/lxc/<ID-CONTENEDOR>.conf
- Añade esta línea al final:
lxc.apparmor.profile: unconfined
- Reinicia el contenedor:
pct restart <ID-CONTENEDOR>
Ventaja: Soluciona el problema para todos los contenedores Docker dentro de ese LXC. Desventaja: Requiere acceso al host Proxmox.
✅ Solución 3: Definitiva (desactivar AppArmor en Docker)
Si no usas LXC o prefieres una solución global, este truco con systemd es ideal.
- Crea un “override” para el servicio Docker:
systemctl edit docker
Pega esto dentro:
[Service]
Environment=container="setmeandforgetme"
- Guarda (Ctrl+O), sal (Ctrl+X) y recarga:
systemctl daemon-reload
systemctl restart docker
4. Verifica que AppArmor quedó desactivado:
```bash
docker info | grep -i apparmor
# No debería mostrar nada
Ventaja: No tocas ni LXC ni cada contenedor. Desventaja: Desactiva la integración con AppArmor globalmente.
⚠️ Nota de seguridad
Desactivar AppArmor (unconfined) reduce la seguridad del contenedor. Esto está bien para:
-
Entornos de desarrollo
-
Laboratorios caseros
-
Proxmox doméstico
No lo recomiendo para servidores de producción críticos sin otras medidas como firewalls, redes aisladas o actualizaciones constantes.
📌 Resumen rápido
| Situación | Solución recomendada |
|---|---|
| Un solo contenedor falla | Solución 1 (security_opt) |
| Docker dentro de LXC/Proxmox | Solución 2 (editar .conf del LXC) |
| Quieres arreglarlo de una vez | Solución 3 (systemd) |
🧪 ¿Cómo probar que funcionó?
Ejecuta un contenedor de prueba:
docker run --rm -it alpine sh
Si entras al shell sin errores… ¡todo está listo!
🧠 Conclusión
El error AppArmor profile could not be loaded es más un problema de compatibilidad que un fallo real. Con cualquiera de estas 3 soluciones podrás seguir usando Docker con normalidad dentro de entornos LXC o Proxmox.
¿Sigues con problemas? Revisa que tu kernel soporte AppArmor o comenta debajo tu caso específico.
💡 ¿Te sirvió? Comparte este tutorial con alguien que también tenga problemas con Docker en Proxmox. ¡Y no olvides dejar una estrella en mi blog si te gustó el contenido!