Cómo instalar Portainer y gestionar contenedores Docker desde la web

Guía práctica para instalar Portainer en Docker, configurar HTTPS y gestionar contenedores, volúmenes y redes desde la interfaz web sin depender de la CLI.

Gestionar decenas de contenedores Docker por línea de comandos se vuelve fricción rápido: olvidas el nombre exacto del contenedor, necesitas recordar las flags de docker run y auditar volúmenes o redes pide comandos compuestos. Portainer resuelve esto ofreciendo una interfaz web que cubre el 90% de las operaciones del día a día — start, stop, logs, exec, creación de stacks docker-compose, gestión de volúmenes nombrados y redes.

Este tutorial es para quien ya tiene Docker corriendo en un servidor Linux (Ubuntu, Debian o similar) y quiere añadir una capa de gestión visual sin reinstalar nada. Vamos a instalar la edición Community (CE), proteger la interfaz con HTTPS autofirmado que el propio Portainer genera, crear el usuario administrador y cubrir las operaciones más comunes. Tiempo estimado: 15 a 25 minutos, dependiendo de la familiaridad con Docker.

La instalación descrita aquí asume un único host Docker — el escenario más común. Si operas múltiples servidores Docker y quieres un panel central, mencionamos al final cómo añadir agentes remotos más adelante.

Prerrequisitos

Antes de comenzar

Necesitas un servidor Linux con Docker Engine 20.10 o superior ya instalado y corriendo, acceso sudo y el puerto TCP 9443 libre. Si el puerto 9443 está en uso, ajusta el mapeo en el paso de instalación. Confirma Docker con docker --version antes de continuar.

Parámetros usados a lo largo del tutorial:

Puerto HTTPS Portainer 9443
Puerto Agent (opcional) 9001
Volumen de datos portainer_data
Imagen oficial portainer/portainer-ce:latest

Si vas a poner esto en un servidor de producción expuesto a internet, considera también tener un dominio apuntando a la IP del servidor — facilita más adelante cambiar el certificado autofirmado por uno de Let’s Encrypt válido a través de un reverse proxy.

Instalación de Portainer Server

La instalación oficial recomendada usa un contenedor Docker dedicado con un volumen nombrado para persistir configuración y datos. No hace falta clonar repositorio ni compilar nada — la imagen oficial cubre todos los casos.

01

Crea el volumen Docker que va a guardar los datos de Portainer (base de datos interna, configuraciones, usuarios, templates):

docker volume create portainer_data

El volumen nombrado garantiza que cualquier actualización o recreación del contenedor Portainer preserve usuarios, endpoints y configuración. Sin él, un docker rm borra todo.

02

Levanta el contenedor Portainer Server con reinicio automático:

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

Cuatro puntos importantes en este comando:

  • 9443 es el puerto HTTPS estándar (certificado autofirmado generado en el primer arranque)
  • 8000 es el puerto del túnel de Edge Agents — solo necesario si vas a usar agentes remotos detrás de NAT más adelante, puedes omitirlo ahora
  • El bind del socket /var/run/docker.sock es lo que le da a Portainer control total del Docker del host
  • --restart=always hace que el contenedor vuelva automáticamente después del reboot del servidor
03

Confirma que el contenedor arrancó y está saludable:

docker ps --filter "name=portainer"

La salida debe mostrar el contenedor con estado Up X seconds y el puerto 0.0.0.0:9443->9443/tcp expuesto. Si no aparece, ejecuta docker logs portainer para ver el error — generalmente es conflicto de puerto o socket Docker inaccesible.

Ventana de 5 minutos para el primer admin

Por motivos de seguridad, Portainer solo acepta la creación del primer usuario admin dentro de los 5 minutos posteriores al arranque del contenedor. Si la ventana expira, el panel muestra un mensaje de seguridad y necesitas reiniciar el contenedor (docker restart portainer) para abrir una nueva ventana.

Primer acceso y creación del admin

Con el contenedor corriendo, abre el navegador y ve a https://IP_DEL_SERVIDOR:9443. El navegador va a alertar sobre certificado no confiable — es lo esperado, Portainer genera un certificado autofirmado en la primera inicialización. Acepta el aviso y continúa.

04

En la primera pantalla, define el usuario administrador:

  • Username: admin (u otro de tu elección)
  • Password: mínimo 12 caracteres, con letras, números y símbolos
  • Confirmación de la misma contraseña

Anota la contraseña en un gestor antes de enviar. La recuperación solo es posible vía procedimiento de reset con contenedor temporal (descrito en el FAQ).

05

En la pantalla siguiente, elige el entorno a gestionar. Como Portainer fue instalado en el mismo host donde está Docker, haz clic en Get Started — esto conecta automáticamente al socket local que montaste en el paso 2.

El dashboard principal aparece mostrando el resumen: número de contenedores corriendo, detenidos, imágenes locales, volúmenes, redes y stacks. Ese es el punto de partida para todas las operaciones.

Operaciones cotidianas

El menú lateral a la izquierda concentra todas las funciones. Las tres áreas que vas a usar más son Containers, Volumes y Networks, todas dentro del endpoint local.

Gestionando contenedores existentes

La lista de contenedores muestra nombre, estado, imagen base, IP interna y puertos expuestos. Cada contenedor tiene acciones inline: start, stop, restart, kill, remove. Haciendo clic en el nombre del contenedor accedes a:

  • Logs — tail en vivo de los logs con filtro y auto-scroll. Equivalente a docker logs -f.
  • Stats — gráficos de CPU, memoria, red e I/O de disco con refresh cada segundo.
  • Console — terminal interactivo dentro del contenedor, equivalente a docker exec -it. Permite elegir el shell (sh, bash) y el usuario.
  • Inspect — JSON completo del contenedor, útil para debug de configuración.

Creando contenedores desde la interfaz

La pantalla Add container sustituye a docker run. Los campos cubren todas las flags principales:

  • Image: la imagen a usar (puede ser remota tipo nginx:latest o local)
  • Always pull the image: equivalente a --pull=always
  • Port mapping: lista de mapeos host:container
  • Volumes: bind mounts o volúmenes named
  • Network: a qué red Docker conectar
  • Restart policy: no, on-failure, unless-stopped, always
  • Env variables: variables de entorno en pares clave/valor
  • Capabilities, runtime, devices: parámetros avanzados en pestañas separadas
Usa Stacks para docker-compose

Para cualquier aplicación con más de un servicio (app + base + redis, por ejemplo), usa la sección Stacks en vez de crear contenedores individualmente. Pega un docker-compose.yml directo en el editor — Portainer hace el deploy y mantiene los servicios agrupados para updates y eliminaciones coordinadas.

Volúmenes y redes

La sección Volumes lista todos los volúmenes nombrados, muestra el driver, tamaño consumido y qué contenedores están usando cada uno. Puedes crear volúmenes nuevos con drivers específicos (local, NFS) y eliminar volúmenes huérfanos con un clic — atajo útil para liberar espacio en disco después de eliminar contenedores de prueba.

La sección Networks muestra las redes Docker (bridge default, host, none y las que crees). La creación soporta drivers bridge y overlay, con opción de definir subnet personalizada y habilitar IPv6.

Verificación de la instalación

Para confirmar que todo está funcionando, haz este test end-to-end:

docker run -d --name test-portainer nginx:alpine

Recarga la pantalla de Containers en Portainer. El contenedor test-portainer debe aparecer en hasta 2 segundos. Haz clic en él, ve a Logs y confirma que ves las líneas de inicialización de nginx. Después usa el botón Remove en Portainer para borrarlo — confirma vía terminal:

docker ps -a | grep test-portainer

La salida debe estar vacía. Si el ciclo completo funcionó, la instalación está validada.

Resolución de problemas

Error “Cannot connect to the Docker daemon”

El socket Docker no está montado correctamente en el contenedor Portainer. Verifica que la flag -v /var/run/docker.sock:/var/run/docker.sock fue usada en el docker run y que el socket existe en el host con ls -la /var/run/docker.sock. En sistemas con SELinux o AppArmor restrictivo, puede ser necesario añadir :z al final del bind (/var/run/docker.sock:/var/run/docker.sock:z).

Puerto 9443 ya en uso

Otro servicio está escuchando en ese puerto. Identifícalo con sudo ss -tlnp | grep 9443 y o detén el servicio conflictivo, o cambia el puerto de Portainer recreando el contenedor con -p 9444:9443 (o cualquier puerto libre). El mapeo interno permanece 9443 — solo el lado del host cambia.

El navegador bloquea el acceso por certificado inválido

Comportamiento esperado en primera instalación debido al certificado autofirmado. En uso real, coloca Portainer detrás de un reverse proxy (nginx o Caddy) con certificado Let’s Encrypt — el proxy hace el TLS público y Portainer responde HTTP interno en la red Docker.

Próximos pasos

Con Portainer corriendo, vale la pena explorar:

  1. Crear un Stack con docker-compose para levantar aplicaciones multi-contenedor coordinadas
  2. Configurar Templates personales — recetas pre-armadas con variables para acelerar deploys repetitivos
  3. Añadir un Agent en un segundo servidor para gestionar múltiples hosts desde el mismo panel
  4. Habilitar Registries privados (Docker Hub privado, GitHub Container Registry) en la sección Registries
  5. Colocar un reverse proxy con Let’s Encrypt delante para tener HTTPS válido en dominio propio

Si estás corriendo Portainer en producción para gestionar workloads críticos, una VPS Hostini de plan dedicado da CPU dedicada y snapshot rápido — útil para probar updates de Portainer o rollback de stacks que fallen. Mira las opciones en /vps.

Preguntas frecuentes

¿Portainer CE es gratuito incluso para uso comercial?

Sí. La edición Community Edition (CE) es open source bajo licencia Zlib y puede usarse comercialmente sin límite de hosts ni usuarios. La edición Business añade RBAC granular, integración con OAuth corporativo y soporte oficial — solo tiene sentido en equipos con requisitos de compliance específicos.

¿Puedo instalar Portainer sin exponer el puerto 9443 a internet?

Puedes y es recomendable. Mantén el puerto 9443 escuchando solo en 127.0.0.1 y accede vía túnel SSH (ssh -L 9443:127.0.0.1:9443 usuario@servidor). Alternativa: deja el puerto público pero restringido por firewall a la IP de origen, o coloca un reverse proxy con autenticación extra delante.

¿Cuál es la diferencia entre Portainer Server y Portainer Agent?

Server es la interfaz web y el orquestador — instalas uno por entorno. Agent es un contenedor ligero que corre en cada host adicional que quieres gestionar desde el mismo Portainer, comunicándose por el puerto 9001. Para un único host Docker, solo el Server es suficiente.

¿Qué pasa si pierdo la contraseña del usuario admin?

Existe el procedimiento de reset oficial: detén el contenedor Portainer, ejecuta portainer/helper-reset-password como contenedor temporal montando el mismo volumen portainer_data, anota la contraseña generada en el log y vuelve a levantar Portainer. El reset preserva todos los endpoints y templates configurados.

¿Puedo migrar contenedores existentes de Docker a Portainer?

Sí, automáticamente. Portainer detecta contenedores, imágenes, volúmenes y redes que ya existen en el host Docker en cuanto se conecta al socket. Ningún dato se mueve ni reescribe — Portainer solo lee el estado y ofrece la interfaz gráfica encima.

¿Por qué Portainer no muestra estadísticas de CPU y memoria en tiempo real?

La recolección de métricas depende del cgroup driver de Docker. Si el host usa cgroup v2 (estándar en distros recientes), Portainer 2.19+ funciona de forma nativa. En cgroup v1 antiguo, verifica que DOCKER_OPTS incluya --exec-opt native.cgroupdriver=systemd y reinicia el daemon Docker.

Temas:
Próximos pasos Cloud Ryzen con NVMe y protección DDoS siempre activa.Pon en producción en un VPS Hostini →
¿Te resultó útil este tutorial?
Hablar por WhatsApp