Guía de despliegue

Portainer vs Dokploy: ¿cuál desplegar en 2026?

Desplegar en un VPS Cloud →

Comparativa

Comparativas

Portainer vs Dokploy: ¿cuál desplegar en 2026?

Portainer y Dokploy son dos interfaces web para gestionar contenedores Docker en un VPS. Portainer es la herramienta histórica — estable, documentada, pero sacudida en 2026 por el fin de la edición Community y por CVEs con puntuación 9.4. Dokploy es el competidor de código abierto, listo para PaaS, que cubre exactamente lo que Portainer CE ya no ofrece. Esta guía resuelve la elección: arquitectura, licencias, seguridad, migración.

12 min de lectura10 pasos
Contenido· Por qué autoalojar una interfaz de despliegue en un VPS1/14
  1. 01Por qué autoalojar una interfaz de despliegue en un VPS
  2. 02Lo que ganas al desplegar este template en tu VPS
  3. 03Portainer en 2026: el fin de la edición Community
  4. 04CVEs críticos de Portainer 2.x: verificar y parchear
  5. 05CVE de Dokploy: el secreto hardcoded (< 0.29.3)
  6. 06Prerequisitos para alojar Portainer o Dokploy
  7. 07Recursos mínimos recomendados
  8. 08Desplegar Dokploy en un VPS (≥ 0.29.13)
  9. 09Portainer como alternativa — instalación rápida
  10. 10Portainer 2.x vs Dokploy — comparativa completa 2026
  11. 11Cuándo quedarse en Portainer, cuándo pasar a Dokploy
  12. 12Migración de Portainer a Dokploy: pasos concretos
  13. 13Resolución de problemas: errores frecuentes
  14. 14Las dos herramientas no son siempre excluyentes

Por qué autoalojar una interfaz de despliegue en un VPS

Un VPS con Docker te deja una sola interfaz: la línea de comandos. Es suficiente para una máquina, tedioso para cinco e inmanejable para un equipo. Una interfaz web centraliza los logs, las actualizaciones de imágenes, las variables de entorno y los certificados TLS, sin obligarte a mantener un pipeline CI/CD completo desde el primer día.

Dos familias compiten: los gestores (Portainer, Yacht) que exponen Docker tal como es, y los PaaS ligeros (Dokploy, Coolify, CapRover) que añaden una capa de despliegue — ramas Git, dominios automáticos, certificados Let's Encrypt. La diferencia no es cosmética: determina si tus desarrolladores pueden desplegar solos o necesitan acceso SSH.

Lo que ganas al desplegar este template en tu VPS

  • Despliegue desde Git o Docker Hub en pocos clics, sin SSH
  • Gestión automática de certificados TLS mediante Let's Encrypt
  • Variables de entorno versionadas y aisladas por proyecto
  • Logs centralizados y terminal web desde el navegador
  • Panel de salud: CPU, RAM, estado de los contenedores
  • Gestión de volúmenes y redes Docker sin memorizar comandos

Portainer en 2026: el fin de la edición Community

Portainer CE (Community Edition) fue la referencia del sector durante años. Con Portainer 3, el editor puso fin a la edición Community: Portainer 3 no tiene edición CE, y CE 2.45 es la última versión Community publicada. Portainer 3 se distribuye como Business Edition (gratuita hasta tres nodos con la licencia «3 Nodes Free»), da prioridad a Kubernetes para las nuevas funciones y mantiene Docker, Swarm y Podman. Las instancias CE 2.45 siguen funcionando y reciben los parches de la 2.45 LTS hasta agosto de 2027, pero ninguna función nueva.

Este cambio tiene varias consecuencias prácticas. Las nuevas instalaciones que buscan una interfaz Docker gratuita no encuentran hoja de ruta para CE. Las imágenes portainer/portainer-ce siguen existiendo y recibiendo los parches de la rama 2.45, pero ya no evolucionarán. Y de forma crítica — Portainer 2.x ha acumulado fallos críticos, entre ellos dos CVEs con puntuación 9.4, que siguen siendo explotables en cualquier instalación sin parchear.

Si todavía usas Portainer 2.x, la pregunta no es si migrar por principio: es si tu instancia está actualizada y si el riesgo es aceptable.

CVEs críticos de Portainer 2.x: verificar y parchear

Dos CVEs afectan a todas las ramas de Portainer hasta las versiones corregidas indicadas abajo (las versiones anteriores a 2.33.0, sin soporte, no se corregirán):

CVE-2026-44848 (CVSS 9.4) — Los endpoints /plugins/* de la API Docker que Portainer reenvía escapan al control de autorización. Un usuario estándar (no administrador) con acceso a un entorno Docker puede instalar y activar un plugin Docker, que se ejecuta como root en tu host.

CVE-2026-44849 (CVSS 9.4) — El mecanismo de restricciones Swarm puede ser eludido: un usuario de Portainer con derechos reducidos puede ejecutar acciones normalmente reservadas al administrador en un clúster Swarm.

Versiones corregidas: 2.33.8, 2.39.2, 2.41.0. Desde entonces se han publicado otros fallos críticos, corregidos en 2.45.2 y 2.45.3 y sin parche en la rama 2.39: apunta a la 2.45.3 LTS, última versión publicada a 7 de noviembre de 2026.

Para verificar tu versión:

docker exec portainer /portainer --version

Para actualizar:

docker pull portainer/portainer-ce:lts
docker stop portainer
docker rm portainer
docker run -d \
  --name=portainer \
  --restart=always \
  -p 127.0.0.1:9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:lts

Si estás por debajo de 2.45.3, actualiza antes de seguir usando la instancia. Este comando solo publica la interfaz en 127.0.0.1: accede mediante un túnel SSH (ssh -L 9443:127.0.0.1:9443 user@tu-vps, luego https://localhost:9443) o un proxy inverso. Añade -p 8000:8000 solo si usas agentes Edge. Portainer expuesto en internet sin parches es un vector de intrusión directo en tu host Docker.

CVE de Dokploy: el secreto hardcoded (< 0.29.3)

Dokploy tampoco está exento de vulnerabilidades. CVE-2026-45631 (CVSS 10.0) afectaba a las instalaciones por defecto anteriores a 0.29.3: cuando la variable BETTER_AUTH_SECRET no estaba definida — y el script de instalación no la definía —, el código recurría a un valor hardcoded, idéntico en todas las instancias. Cualquiera podía falsificar un token y tomar la cuenta de administrador, sin autenticación.

La corrección llegó en 0.29.3, junto con un script de migración que se ejecuta tras actualizar. Muchos otros fallos críticos (inyecciones de comandos, controles de acceso ausentes) se corrigieron hasta la 0.29.13: no te quedes por debajo y apunta a la última versión (0.31.0 a 7 de noviembre de 2026). Para verificar y actualizar:

# Verificar la versión instalada (tag de la imagen del servicio)
docker service inspect dokploy --format '{{.Spec.TaskTemplate.ContainerSpec.Image}}'

# Actualizar mediante el script oficial
curl -sSL https://dokploy.com/install.sh | sh -s update

Desde 0.29.3, Dokploy lee BETTER_AUTH_SECRET desde un secreto Docker (variable BETTER_AUTH_SECRET_FILE). Tras actualizar, verifica que el servicio lo usa:

docker service inspect dokploy --format '{{range .Spec.TaskTemplate.ContainerSpec.Env}}{{println .}}{{end}}' | grep BETTER_AUTH_SECRET_FILE

Si la línea no aparece, ejecuta el script de seguridad oficial publicado con la 0.29.3: genera un secreto único y actualiza el servicio.

curl -sSL https://dokploy.com/security/0.29.3.sh | bash

Prerequisitos para alojar Portainer o Dokploy

Ambas herramientas funcionan sobre Docker. Dokploy requiere algo más de recursos, ya que incluye una base de datos PostgreSQL y un proxy Traefik además del servicio principal.

Recursos mínimos recomendados

  • Portainer 2.x: el editor no publica un mínimo de hardware; la 2.45.3 está validada con Docker 28.5.1 y 29.8.1 — funciona en un VPS pequeño
  • Dokploy: al menos 2 GB de RAM y 30 GB de disco según la documentación oficial — PostgreSQL y Traefik se ejecutan junto al servicio principal
  • Un dominio o subdominio apuntando a tu VPS (Dokploy lo necesita para los certificados automáticos)
  • Puertos 80 y 443 abiertos si usas Let's Encrypt vía Traefik (Dokploy)
  • Acceso SSH root o sudo para la instalación inicial

Desplegar Dokploy en un VPS (≥ 0.29.13)

  1. Instalación mediante el script oficial

    El método más sencillo y actualizado:

    curl -sSL https://dokploy.com/install.sh | sh

    El script instala Docker si es necesario, inicializa Docker Swarm, crea los servicios dokploy y dokploy-postgres y el contenedor dokploy-traefik (configuración en /etc/dokploy/), genera un BETTER_AUTH_SECRET aleatorio guardado en un secreto Docker y arranca todo.

  2. Verificar el BETTER_AUTH_SECRET

    Tras la instalación, asegúrate de que el servicio lee su secreto:

    docker service inspect dokploy --format '{{range .Spec.TaskTemplate.ContainerSpec.Env}}{{println .}}{{end}}' | grep BETTER_AUTH_SECRET_FILE

    Deberías ver una línea BETTER_AUTH_SECRET_FILE=/run/secrets/...: el valor (64 caracteres hexadecimales generados por openssl rand -hex 32) queda en el secreto Docker y nunca aparece en claro. Si la línea no aparece (instalación antigua), ejecuta el script de seguridad oficial:

    curl -sSL https://dokploy.com/security/0.29.3.sh | bash
  3. Acceder a la interfaz y crear la cuenta de administrador

    Dokploy escucha en el puerto 3000 por defecto. Abre http://<ip-de-tu-vps>:3000 en el navegador. La primera visita te invita a crear la cuenta de administrador. Hazlo inmediatamente — la interfaz es pública hasta que exista esta cuenta.

  4. Configurar tu dominio y activar HTTPS

    En Settings → Web Server → Server Domain, introduce tu FQDN (dokploy.tudominio.com). Traefik obtiene automáticamente un certificado Let's Encrypt vía ACME HTTP-01. Tu DNS debe apuntar al VPS antes de este paso. Cuando la interfaz se sirva por HTTPS, cierra el puerto 3000 a internet, como recomienda la guía de endurecimiento de Dokploy: ufw por sí solo no filtra los puertos publicados por Docker, usa ufw-docker o el cortafuegos de tu proveedor.

  5. Actualizar Dokploy

    Dokploy expone un botón de actualización en Settings → Web Server, o usa el script:

    curl -sSL https://dokploy.com/install.sh | sh -s update

    Con el argumento update, el script descarga la imagen de la última versión y actualiza el servicio dokploy sin borrar tu configuración ni tus proyectos. Sin ese argumento, lanza una instalación completa, que falla en un servidor ya instalado (puertos 80, 443 y 3000 ocupados).

Portainer como alternativa — instalación rápida

Si prefieres quedarte con Portainer (instancia existente o elección deliberada), el comando de referencia:

docker run -d \
  --name=portainer \
  --restart=always \
  -p 127.0.0.1:9443:9443 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_data:/data \
  portainer/portainer-ce:lts

Acceso mediante un túnel SSH (ssh -L 9443:127.0.0.1:9443 user@tu-vps, luego https://localhost:9443) o un proxy inverso. Sustituye lts por 2.45.3 para fijar la versión y evitar actualizaciones silenciosas.

Portainer 2.x vs Dokploy — comparativa completa 2026

Desplace la tabla

CriterioPortainer 2.xDokploy
LicenciaCE gratuita (licencia zlib)Apache 2.0 (salvo la carpeta /proprietary)
Futuro CECE se detiene en 2.45 (parches hasta agosto de 2027)Hoja de ruta activa, comunidad creciente
CVEs activosCVE-2026-44848 + 44849 (CVSS 9.4) y avisos posteriores: apuntar a 2.45.3CVE-2026-45631 (CVSS 10.0) si < 0.29.3; apuntar a ≥ 0.29.13
RAM mínimaNo publicada (herramienta ligera)2 GB (PostgreSQL + Traefik incluidos)
Despliegue GitSí (stacks Compose desde un repositorio Git)Sí (GitHub, GitLab, Gitea, Bitbucket)
Certificados TLSManual (proxy inverso externo)Automático Let's Encrypt vía Traefik
Templates de appsSí (biblioteca integrada)Sí (Docker Compose importado)
Registro privadoSíSí
CI/CD integradoActualizaciones GitOps (polling o webhook)Webhooks Git + notificaciones
KubernetesSí (CE y BE)No (Docker Compose / Swarm)
Multi-servidorSí (endpoints)Sí (servidores remotos por SSH)
InterfazMadura y exhaustivaModerna, orientada a proyectos

Cuándo quedarse en Portainer, cuándo pasar a Dokploy

Quedarse en Portainer 2.x tiene sentido en tres situaciones: ya gestionas un clúster Docker Swarm o Kubernetes con configuraciones complejas; tienes equipos que dominan la interfaz con runbooks documentados; o necesitas el nivel de detalle sobre redes y volúmenes que Portainer expone de forma nativa.

En estos casos, la condición innegociable es estar en una versión actualizada (2.45.3 a 7 de noviembre de 2026) y restringir el acceso a la interfaz: nunca expongas el puerto 9000/9443 directamente en internet, coloca Portainer detrás de un proxy inverso con autenticación adicional si usuarios no administradores acceden a él.

Migrar a Dokploy es la decisión correcta si: empiezas desde cero en un VPS nuevo; quieres que tus desarrolladores desplieguen desde Git sin SSH; gestionas múltiples dominios y no quieres mantener Nginx/Traefik manualmente; o buscas una alternativa tras el fin de CE (Portainer 3 no tiene edición Community) para tu uso con Docker.

Migración de Portainer a Dokploy: pasos concretos

  1. Exportar tu inventario de Portainer

    Antes de migrar, lista tus stacks y contenedores activos:

    docker ps --format 'table {{.Names}}	{{.Image}}	{{.Status}}'
    docker volume ls
    docker network ls --filter driver=bridge

    Para cada stack de Portainer, obtén el docker-compose.yml desde la interfaz (Stacks → tu stack → Editor) o desde el sistema de archivos.

  2. Hacer copia de seguridad de los volúmenes de datos

    Los volúmenes con nombre contienen tus datos de aplicación. Hazles copia de seguridad antes de cualquier operación:

    docker run --rm \
      -v <nombre_volumen>:/data \
      -v $(pwd):/backup \
      alpine tar czf /backup/<nombre_volumen>.tar.gz /data

    Repite para cada volumen crítico.

  3. Instalar Dokploy en el mismo VPS o en uno dedicado

    Si migras en el mismo host, detén Portainer primero para liberar los puertos:

    docker stop portainer && docker rm portainer

    Luego ejecuta la instalación de Dokploy (ver procedimiento arriba). Dokploy usa Traefik en los puertos 80/443 — verifica que ningún otro servicio los ocupe.

  4. Recrear tus proyectos en Dokploy

    En Dokploy, crea un Compose Project para cada stack de Portainer:
    1. Proyectos → Nuevo proyecto
    2. Añade un servicio de tipo Docker Compose
    3. Pega tu docker-compose.yml o apunta a tu repositorio Git
    4. Configura las variables de entorno desde la pestaña Environment
    5. Asigna un dominio — Dokploy configura Traefik automáticamente

  5. Verificar y cambiar el DNS

    Despliega primero en un subdominio de prueba (test.tudominio.com). Una vez validado, actualiza tus entradas DNS para apuntar a Dokploy. Traefik emite los certificados automáticamente en cuanto el DNS se propaga.

Resolución de problemas: errores frecuentes

Portainer — interfaz inaccesible tras actualización
Verifica que el volumen portainer_data esté correctamente montado. Una actualización sin volumen con nombre parte de una base vacía y vuelve a solicitar la creación de la cuenta de administrador.

Portainer — TLS handshake error en el puerto 9443
Portainer genera un certificado autofirmado. Tu navegador avisa correctamente. Coloca Portainer detrás de un proxy inverso (nginx, Caddy) con un certificado real para acceso seguro en producción.

Dokploy — Traefik no genera un certificado
Causa más frecuente: el DNS aún no se ha propagado hacia el VPS. Verifica con dig +short tudominio.com. Traefik espera una respuesta DNS válida antes de lanzar el challenge ACME. Si el DNS es correcto, verifica que el puerto 80 esté abierto (ufw allow 80).

Dokploy — despliegue Git que falla silenciosamente
Revisa los logs del servicio en la interfaz (Deployments → pestaña Logs). En un repositorio privado, una causa frecuente es una clave SSH ausente o no autorizada en el repositorio. Dokploy permite crear una en Settings → SSH Keys (botón Create SSH Key), para añadirla como clave de despliegue del repositorio; para GitHub, GitLab, Gitea o Bitbucket, también puedes conectar el proveedor en los ajustes Git de Dokploy.

Las dos herramientas no son siempre excluyentes

Portainer puede gestionar varios endpoints Docker remotos desde una sola interfaz — incluido un VPS donde esté instalado Dokploy. Algunos equipos mantienen Portainer como herramienta de observación y Dokploy como herramienta de despliegue. No es un antipatrón si los roles están claramente separados. El coste: dos superficies que parchear. Si has elegido esta arquitectura, asegúrate de que ambas herramientas están actualizadas — consulta los CVEs al inicio del artículo.

Para ir más lejos: alternativas a Portainer CE, guía completa de despliegue con Dokploy y la actualización crítica de CVE Dokploy 2026.

Despliega Dokploy en tu VPS en minutos

En un VPS de ServOrbit con acceso root, Dokploy se instala manualmente y configura Docker, Traefik y los certificados TLS. Instala una versión ≥ 0.29.13, parcheada y lista para producción.