Tutorial

Docker v29 en VPS: migrar sin romper sus stacks

Despliegue12 min de lectura13 pasos

Docker Engine v29, publicado en marzo de 2026, modifica tres cimientos a la vez: versión mínima de API, backend de red nftables y almacén de imágenes containerd. Un VPS sin preparar que recibe esta actualización se rompe en silencio — docker-compose v1 standalone deja de funcionar, Dockge ya no arranca, las reglas iptables que sus stacks daban por hechas desaparecen. Esta guía le permite detectar lo que está roto, migrar limpiamente y evitar que el próximo `apt upgrade` se convierta en una incidencia de cliente a las 2 de la madrugada.

Contenido· Por qué Docker v29 rompe los stacks existentes — y por qué ahora1/12
  1. 01Por qué Docker v29 rompe los stacks existentes — y por qué ahora
  2. 02Lo que esta guía le permite hacer
  3. 03Requisitos previos antes de empezar
  4. 04Paso 1 — Diagnosticar la versión de API
  5. 05Paso 2 — Migrar de docker-compose v1 al plugin v2
  6. 06Paso 3 — Entender y adaptarse al cambio de backend de red nftables
  7. 07Paso 4 — Evaluar y activar el almacén de imágenes containerd
  8. 08Compatibilidad de las herramientas de terceros con Docker Engine v29
  9. 09Pruebe la migración en un snapshot antes de tocar la producción
  10. 10Resolución de problemas — errores reales y remedios
  11. 11Escenarios de error frecuentes
  12. 12Preparar su flota para evitar la próxima incidencia

Por qué Docker v29 rompe los stacks existentes — y por qué ahora

Una agencia que gestiona una flota de VPS de clientes vive en una tenaza particular: la actualización aguas arriba (Docker, Ubuntu, Debian) llega desde fuera, con independencia de quién administre el servidor. Cuando un VPS de cliente recibe apt upgrade sin control, tres rupturas ocurren al mismo tiempo.

Primera ruptura — versión mínima de API. Docker Engine v29 eleva la versión mínima de API a 1.44. Los clientes que todavía funcionan con el antiguo docker-compose v1 standalone (binario /usr/local/bin/docker-compose) fallan de inmediato: su código cliente está compilado para versiones de API anteriores, y el daemon rechaza la conexión con un mensaje de incompatibilidad.

Segunda ruptura — backend de red nftables. Docker v29 activa nftables por defecto en lugar de iptables para gestionar las reglas de cortafuegos de las redes Docker. Los scripts de terceros que inspeccionan directamente las cadenas iptables (scripts de monitorización, cortafuegos a medida, algunas reglas UFW) ya no ven las reglas Docker — no porque hayan desaparecido, sino porque ahora viven en nftables.

Tercera ruptura — almacén de imágenes containerd. El backend de almacenamiento de las imágenes pasa al almacén containerd. En opt-in desde v29, será el valor por defecto en v30. En un servidor migrado, las imágenes existentes siguen accesibles, pero la ruta de caché cambia, lo que puede sorprender a los scripts que inspeccionan /var/lib/docker/image directamente.

La objeción clásica — «nuestros clientes gestionan sus VPS ellos mismos» — no protege. La ruptura llega desde fuera, y es a la agencia a quien llama el cliente cuando su sitio deja de responder.

Lo que esta guía le permite hacer

  • Detectar la versión de API en tensión entre su cliente docker y el daemon del VPS, antes de que el próximo comando produzca un error críptico.
  • Identificar en 30 segundos si un VPS todavía funciona con docker-compose v1 standalone — el binario obsoleto desde Docker Desktop 3.6 y retirado de los paquetes oficiales.
  • Migrar al plugin docker compose v2 con los dos comandos exactos, y luego verificar que sus docker-compose.yml existentes funcionan sin cambios de sintaxis.
  • Comprender el impacto de nftables en sus stacks: lo que sigue funcionando (las redes Docker), lo que puede romperse (sus scripts que leen iptables) y el comando de diagnóstico que lo aclara.
  • Activar o aplazar el almacén containerd según su calendario de migración, con la clave de configuración exacta y el comando de verificación.
  • Evaluar la compatibilidad de Dockge, Portainer y CasaOS App Store con v29, para no descubrir la incompatibilidad durante una incidencia de cliente.
  • Preparar los VPS de sus clientes para que el próximo apt upgrade sea un evento planificado, no una urgencia nocturna.

Requisitos previos antes de empezar

Esta guía se aplica a cualquier VPS Ubuntu 22.04/24.04 o Debian 11/12 en el que Docker Engine esté instalado desde los repositorios oficiales de Docker Inc. (no el paquete docker.io de la distribución). Necesita un acceso SSH root o sudo. No se requiere ninguna interrupción de servicio para los pasos de diagnóstico; la migración del plugin compose necesita unos segundos durante los cuales los comandos docker compose no están disponibles. Prevea un snapshot del VPS antes de modificar /etc/docker/daemon.json si activa el almacén containerd — la restauración en caso de problema lleva menos de cinco minutos con un buen VPS que ofrezca snapshots bajo demanda.

Paso 1 — Diagnosticar la versión de API

  1. Verificar la versión de API del cliente y del daemon

    En cada VPS que vaya a auditar, ejecute los dos comandos siguientes:

    docker version --format '{{.Client.APIVersion}}'
    docker version --format '{{.Server.APIVersion}}'

    Si la versión del cliente es inferior a 1.44 y el daemon funciona en v29, obtendrá un error en los próximos comandos. El umbral 1.44 es el mínimo aceptado por Docker Engine v29: un cliente compilado para 1.43 o anterior falla con Error response from daemon: client version 1.43 is too old. Minimum supported API version is 1.44, please upgrade your client.

    Si ambas líneas muestran 1.44 o más, su cliente es compatible. Pase al paso siguiente.

  2. Detectar la presencia de docker-compose v1 standalone

    El comando docker-compose con guion y el comando docker compose sin guion no son lo mismo. El v1 es un binario Python autónomo; el v2 es un plugin Go integrado en la CLI de Docker.

    which docker-compose && docker-compose --version

    Si el comando devuelve una ruta en /usr/local/bin/ o /usr/bin/ con una versión 1.x.x, tiene el binario standalone obsoleto. Tras la actualización a Docker v29, ese binario devuelve docker-compose: command not found si el paquete ha sido retirado, o el error de API descrito arriba si todavía está presente.

    docker compose version

    Si este comando devuelve Docker Compose version v2.x.x, el plugin v2 ya está presente. Ambos pueden convivir temporalmente, pero el objetivo es usar únicamente el plugin v2.

Paso 2 — Migrar de docker-compose v1 al plugin v2

  1. Retirar el binario v1 e instalar el plugin

    apt remove docker-compose
    apt install docker-compose-plugin

    En un VPS Debian o Ubuntu que use los repositorios oficiales de Docker Inc. (download.docker.com), el paquete docker-compose-plugin está disponible sin configuración adicional. Si apt remove docker-compose responde Package not found, el binario se instaló manualmente: localícelo con which docker-compose y elimine el archivo.

    Verificación posterior a la migración:

    docker compose version
    # Docker Compose version v2.36.0
  2. Verificar la compatibilidad sintáctica de sus archivos Compose existentes

    La gran mayoría de los archivos docker-compose.yml escritos para v1 funcionan sin modificación con el plugin v2. Las únicas rupturas de sintaxis afectan a las directivas version: superiores a "3.8" (ignoradas en v2, no bloqueantes) y a la opción --compatibility (retirada). Valide sus archivos existentes:

    docker compose config

    Este comando resuelve las variables de entorno, valida la sintaxis y muestra la configuración resuelta. Una salida sin errores significa que su archivo es compatible.

    Si su equipo usa scripts de shell con docker-compose (con guion), ponga un alias de compatibilidad en el /etc/bash.bashrc del VPS:

    alias docker-compose='docker compose'

    Este alias no resuelve los scripts que llaman a docker-compose con ruta absoluta desde un cron o un servicio systemd — audítelos.

Paso 3 — Entender y adaptarse al cambio de backend de red nftables

  1. Verificar que las redes Docker siguen funcionando

    La buena noticia: docker network funciona correctamente con nftables. El tráfico entre contenedores, el NAT y la exposición de puertos siguen funcionando. Lo que cambia es la herramienta subyacente que escribe las reglas.

    docker network ls

    Sus redes bridge existentes siguen apareciendo en la lista. Para comprobar que un contenedor recibe tráfico en el puerto esperado, pruebe directamente:

    curl -s http://localhost:8080/health

    Si la respuesta es correcta, el plano de datos de Docker funciona con independencia del backend.

  2. Diagnosticar el impacto en sus scripts iptables

    El problema aparece cuando un script de terceros (monitorización, Ansible, reglas UFW) inspecciona iptables para comprobar que las reglas Docker están presentes:

    iptables -L DOCKER 2>&1

    Con el backend nftables, esa cadena está vacía o ausente. El script devuelve un error mientras Docker funciona perfectamente. No es una avería de Docker — es su herramienta de auditoría, que ya no mira en el sitio correcto.

    Para inspeccionar las reglas reales:

    nft list ruleset | grep -A 20 'docker'

    Si sus scripts de monitorización o sus playbooks Ansible comprueban la presencia de reglas iptables específicas de Docker, adáptelos para consultar nftables en lugar de deducir de ahí una avería.

    Si tiene reglas UFW personalizadas que interactúan con las reglas Docker, consulte la documentación de Docker sobre el modo DOCKER-USER — existe tanto en nftables como en iptables, pero la sintaxis para añadir reglas difiere. El artículo [pare-feu-ufw-vps](/blog/pare-feu-ufw-vps) cubre UFW de forma general; para la interacción específica de Docker v29, consulte las notas de la versión oficial.

Paso 4 — Evaluar y activar el almacén de imágenes containerd

  1. Verificar el driver de almacenamiento actual

    docker info | grep 'Storage Driver'

    En un VPS actualizado a v29 sin cambios de configuración, obtendrá normalmente Storage Driver: overlay2. El almacén containerd es opt-in en v29 — no se activa automáticamente. Será el valor por defecto en v30.

    Si ve Storage Driver: overlayfs (señal de que alguien ya ha activado el backend containerd), el almacén está activo.

  2. Activar el almacén containerd (opt-in, recomendado antes de v30)

    Para activar el almacén containerd en v29 y preparar la migración antes de que se imponga en v30, añada la clave siguiente en /etc/docker/daemon.json:

    {
      "features": {
        "containerd-snapshotter": true
      }
    }

    Reinicie el daemon:

    systemctl restart docker

    Verificación:

    docker info | grep 'Storage Driver'
    # Storage Driver: overlayfs

    Punto de atención: las imágenes existentes descargadas bajo overlay2 siguen disponibles, pero las nuevas capas se escriben en el formato containerd. Si necesita volver atrás, elimine la clave y reinicie — las imágenes del nuevo formato dejarán de ser accesibles sin el backend containerd. Por eso se recomienda un snapshot antes de este paso.

Compatibilidad de las herramientas de terceros con Docker Engine v29

Desplace la tabla

HerramientaEstado de compatibilidad con v29Acción recomendada
**Dockge** (hasta 1.4.1 incluido)No compatible: el daemon de Dockge llama a rutas de API retiradas en v29. El panel ya no arranca tras la actualización de Docker.Actualizar Dockge a la versión 1.4.2 o superior, que apunta a la API v1.44. Revisar las notas de versión de Dockge antes de un `apt upgrade` en un VPS que lo aloje.
**Portainer** (Community Edition < 2.21)Parcialmente compatible: la interfaz funciona, pero los entornos Docker standalone pueden mostrar errores en las vistas de red. La versión 2.21 corrige las llamadas nftables.Actualizar Portainer con `docker pull portainer/portainer-ce:latest` y luego `docker compose up -d` antes de actualizar Docker Engine.
**CasaOS App Store**Compatibilidad parcial documentada: las apps desplegadas siguen funcionando, pero el gestor de apps puede señalar errores al inspeccionar las imágenes si el almacén containerd está activado. No hay versión correctiva anunciada a fecha de 2026-08.Mantener el almacén containerd en opt-out (valor por defecto en v29) en los VPS con CasaOS hasta que haya una versión correctiva. Probar en un entorno de copia antes de cualquier actualización.

Pruebe la migración en un snapshot antes de tocar la producción

Un VPS con acceso root y snapshots permite validar cada paso de esta migración sin riesgo. Cree un snapshot llamado avant-docker-v29, realice la migración completa, valide sus stacks y elimine después el snapshot. Si algo sale mal por el camino, la restauración devuelve el VPS a su estado inicial en menos de cinco minutos. Es exactamente el uso que cubren los snapshots bajo demanda: probar una actualización de sistema arriesgada en una copia exacta, no en la producción del cliente.

Resolución de problemas — errores reales y remedios

Los tres escenarios siguientes cubren la mayoría de las incidencias observadas durante migraciones a Docker v29 en flotas de VPS.

Escenarios de error frecuentes

  1. Error: `client version X.XX is too old. Minimum supported API version is 1.44`

    Causa: el binario docker-compose v1 standalone sigue presente e intenta comunicarse con el daemon v29.

    Remedio:

    apt remove docker-compose
    apt install docker-compose-plugin
    docker compose version

    Si el binario se instaló manualmente (fuera de apt), búsquelo:

    which docker-compose
    rm /usr/local/bin/docker-compose
  2. Error: `docker-compose: command not found` tras `apt upgrade`

    Causa: el paquete docker-compose (v1) fue retirado durante la actualización, y el plugin v2 no se instaló.

    Remedio:

    apt install docker-compose-plugin

    Compruebe después que sus scripts que llaman a docker-compose (con guion) usan ahora docker compose (sin guion), o ponga el alias de sistema.

  3. Error: `iptables: No chain/target/match by that name` en un script de monitorización

    Causa: su script inspecciona la cadena DOCKER en iptables, pero Docker v29 con nftables ya no la escribe ahí.

    Remedio: sustituya la comprobación iptables por una comprobación nftables:

    nft list ruleset | grep -c 'docker'

    Si el recuento es mayor que cero, las reglas Docker están presentes en nftables. O use docker network inspect bridge para comprobar el estado del plano de datos directamente desde Docker, sin depender del backend de red.

  4. Dockge ya no arranca tras la actualización

    Causa: Dockge 1.4.1 y anteriores llaman a rutas de API ausentes en Docker Engine v29.

    Remedio:

    cd /opt/dockge
    docker compose pull
    docker compose up -d

    Si el tag latest de la imagen de Dockge ya está en 1.4.2 o superior, este comando basta. Si no, edite el docker-compose.yml de Dockge para apuntar al tag de la versión correctiva antes de relanzarlo.

  5. Los contenedores ya no responden en sus puertos tras reiniciar el daemon

    Causa: en el primer reinicio de dockerd en modo nftables, las reglas de NAT se reescriben en el backend correcto, pero algunas distribuciones tienen un conflicto entre el servicio iptables-legacy y nftables que retrasa la puesta en marcha de las reglas.

    Remedio:

    systemctl stop docker
    systemctl disable iptables
    systemctl start docker

    Compruebe después que los contenedores se han reiniciado correctamente (docker compose up -d) y que los puertos están expuestos (docker ps --format 'table {{.Names}}\t{{.Ports}}').

Preparar su flota para evitar la próxima incidencia

Una migración a Docker v29 bien llevada no es un acontecimiento aislado — es la ocasión de instaurar los reflejos que evitan la próxima urgencia nocturna.

Bloquee la versión de Docker en apt. En los VPS de clientes, impida que Docker se actualice automáticamente durante los apt upgrade no supervisados:

apt-mark hold docker-ce docker-ce-cli containerd.io

Desbloquee (apt-mark unhold) únicamente cuando esté listo para migrar, después de haber probado en un snapshot.

Automatice la auditoría de la flota. Un playbook Ansible que verifique la versión de API de Docker en cada VPS se escribe en menos de una hora y le da un cuadro de mando de la exposición de su flota antes de cada versión mayor de Docker. El artículo [ansible-automatiser-serveurs-vps](/blog/ansible-automatiser-serveurs-vps) cubre la implantación de este tipo de inventario.

Integre la migración de Docker en su rutina de parches. El procedimiento descrito aquí — snapshot, verificación de API, migración de compose, prueba de nftables, validación de los stacks — se documenta como runbook y se repite en cada versión mayor. El artículo [routine-correctifs-apps-self-hosted](/blog/routine-correctifs-apps-self-hosted) ofrece una estructura para industrializar estos gestos en una flota de VPS.

Pruebe sus stacks en un entorno de copia. Un VPS de staging con snapshot le permite reproducir exactamente el contexto de un VPS de cliente, repetir la migración y validar los stacks antes de intervenir en producción. Es lo que hacen posible, a escala de una agencia, los VPS con acceso root y snapshots bajo demanda.

VPS listos para Docker v29 — con snapshots y acceso root

Una agencia que gestiona varios VPS de clientes necesita una infraestructura Docker homogénea, versionada y preparada para las actualizaciones aguas arriba. ServOrbit ofrece VPS con acceso root, IPv4 dedicada y snapshots — para que cada migración se pruebe primero en un entorno de copia, no en la producción de un cliente.

¿Necesita ayuda?

Consulte nuestro centro de ayuda y nuestra FAQ, o contacte con nuestro equipo: llamada, WhatsApp o correo electrónico. Soporte en francés, inglés y árabe.

Escribir por WhatsAppse abre en una pestaña nueva