Portainer es una interfaz web para administrar Docker: desde el navegador puedes ver y gestionar contenedores, imágenes, volúmenes, redes y stacks de Docker Compose. En este tutorial instalarás Portainer Community Edition (CE) como contenedor en un servidor Ubuntu 24.04, accederás a su panel por HTTPS, crearás el usuario administrador y aprenderás a actualizarlo sin perder su configuración.

Requisitos previos

  • Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 1 GB de RAM.
  • Un usuario no root con privilegios sudo.
  • Docker Engine instalado desde el repositorio oficial de Docker. Si aún no lo tienes, sigue la guía "Cómo instalar Docker en Ubuntu 24.04, Debian 12 y Rocky 9".
  • El puerto TCP 9443 accesible desde tu equipo.

Comprueba que Docker funciona antes de empezar:

sudo docker version --format '{{.Server.Version}}'
28.4.0

Cualquier versión actual de Docker Engine es válida.

Paso 1: Crear el volumen de datos

Portainer guarda su base de datos interna (usuarios, entornos, configuración) en /data dentro del contenedor. Crea un volumen de Docker para que esos datos sobrevivan cuando actualices o recrees el contenedor:

sudo docker volume create portainer_data

Comprueba que existe:

sudo docker volume ls
DRIVER    VOLUME NAME
local     portainer_data

Paso 2: Ejecutar el contenedor de Portainer

Lanza Portainer CE con la imagen lts, que corresponde a la versión de soporte extendido recomendada para producción:

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

Qué hace cada opción:

  • -p 9443:9443 publica la interfaz web por HTTPS. Portainer genera un certificado autofirmado la primera vez que arranca.
  • --restart=always vuelve a arrancar el contenedor tras un reinicio del servidor o del servicio Docker.
  • -v /var/run/docker.sock:/var/run/docker.sock da a Portainer acceso a la API de Docker del propio servidor.
  • -v portainer_data:/data monta el volumen del paso anterior.

Las guías antiguas publican también el puerto 9000 (HTTP sin cifrar) y el 8000. El 9000 ya no es necesario y el 8000 solo se usa para agentes Edge, por lo que no los publicamos.

Comprueba que el contenedor está en marcha:

sudo docker ps --filter name=portainer
CONTAINER ID   IMAGE                        COMMAND        CREATED          STATUS          PORTS                                        NAMES
3f2a1b9c8d7e   portainer/portainer-ce:lts   "/portainer"   20 seconds ago   Up 19 seconds   8000/tcp, 9000/tcp, 0.0.0.0:9443->9443/tcp   portainer

Y que responde por HTTPS desde el propio servidor:

curl -kI https://localhost:9443
HTTP/1.1 200 OK
...

Paso 3: Tener en cuenta el firewall

Docker añade sus propias reglas de iptables para los puertos publicados con -p, y esas reglas se aplican antes que las de UFW. Eso significa que el puerto 9443 queda accesible desde internet aunque UFW no lo permita de forma explícita, y que un ufw deny 9443 no lo bloquea.

Si no quieres exponer Portainer a internet, publícalo solo en la interfaz local cambiando la opción -p al crear el contenedor:

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

(Si ya lo creaste con el comando del paso 2, elimínalo antes con sudo docker rm -f portainer; los datos están en el volumen y no se pierden.)

Después accede a través de un túnel SSH desde tu equipo:

ssh -L 9443:localhost:9443 your_user@your_server_ip

Con el túnel abierto, la interfaz está disponible en https://localhost:9443 en tu navegador local.

Paso 4: Crear el usuario administrador

Abre en el navegador la dirección de Portainer (o https://localhost:9443 si usas el túnel SSH):

https://your_server_ip:9443

Sustituye your_server_ip por la IP pública del servidor. El navegador avisará de que el certificado es autofirmado; acepta la excepción para continuar.

En la primera pantalla, crea el administrador:

  1. Escribe el nombre de usuario (por defecto admin, puedes cambiarlo).
  2. Introduce una contraseña de al menos 12 caracteres y confírmala.
  3. Pulsa Create user.

Paso 5: Conectar el entorno Docker local

Tras crear el usuario, Portainer muestra el asistente de bienvenida. Pulsa Get Started para usar el entorno en el que se está ejecutando Portainer. Aparecerá un entorno llamado local en la página Home.

Haz clic en local para abrir su panel. Deberías ver el número de contenedores, imágenes, volúmenes y redes del servidor, entre ellos el propio contenedor portainer. Para comprobar que todo funciona, despliega un contenedor de prueba:

  1. Ve a Containers > Add container.
  2. En Name escribe hello-nginx y en Image escribe nginx:alpine.
  3. En Network ports configuration, pulsa Publish a new network port y asigna el puerto 8080 del host al 80 del contenedor.
  4. Pulsa Deploy the container.

Comprueba desde el servidor que responde:

curl -I http://localhost:8080
HTTP/1.1 200 OK
Server: nginx/1.29.1
...

Cuando termines, elimina el contenedor de prueba desde la lista Containers seleccionándolo y pulsando Remove.

Paso 6: Actualizar Portainer

Para actualizar Portainer basta con recrear el contenedor con la imagen nueva. Como la configuración vive en el volumen portainer_data, no se pierde nada. Detén y elimina el contenedor actual:

sudo docker stop portainer
sudo docker rm portainer

Descarga la última imagen lts:

sudo docker pull portainer/portainer-ce:lts

Vuelve a crear el contenedor con el mismo comando docker run que usaste en el paso 2 (o en el paso 3 si lo publicaste solo en local). Al entrar de nuevo en la interfaz, la versión aparece en la esquina inferior izquierda.

Solución de problemas

  • La página no carga en https://your_server_ip:9443: comprueba que el contenedor está Up con sudo docker ps y revisa sus registros con sudo docker logs portainer. Si tienes un firewall externo en el panel de tu proveedor, permite en él el puerto 9443.
  • Accedes por http:// y no carga: Portainer solo escucha por HTTPS en el 9443. Usa https://.
  • Has olvidado la contraseña del administrador: si no hay otro administrador, la forma más sencilla es borrar el contenedor y el volumen (sudo docker rm -f portainer y sudo docker volume rm portainer_data) y volver a instalar. Perderás la configuración de Portainer, pero no tus contenedores.

Conclusión

Tienes Portainer CE funcionando sobre Docker en Ubuntu 24.04, accesible por HTTPS y con un administrador protegido. Como siguientes pasos, puedes desplegar aplicaciones desde Stacks pegando un archivo de Docker Compose, crear usuarios adicionales con permisos limitados en Users, o colocar Portainer detrás de un proxy inverso con un certificado de Let's Encrypt para tu dominio.