Instalar Dockhand Docker: Gestor de Contenedores Enfocado en Seguridad

Guia paso a paso para instalar Dockhand con Docker Compose. Cubre configuraciones SQLite y PostgreSQL, OIDC/SSO, escaneo de vulnerabilidades, auto-actualizaciones y gestion de hosts remotos con Hawser.

Instalar Dockhand Docker: Gestor de Contenedores Enfocado en Seguridad

Dockhand lanzo su primer release en Diciembre 2025 y ha estado sacando actualizaciones a un ritmo que raramente veo de proyectos nuevos. Dieciseis releases en aproximadamente dos meses. Lo instale junto con Arcane en el mismo servidor para ver como se comparan, y mientras Arcane tiene la ventaja de madurez, las features de seguridad de Dockhand captaron mi atencion.

Si estas tratando de decidir entre los dos, lee primero mi comparacion Arcane vs Dockhand. Esta guia es para personas que ya decidieron por Dockhand y quieren que funcione properly.

Lo que Dockhand trae a la mesa

Dockhand es una UI de gestion Docker construida sobre Bun y SvelteKit. El angulo de seguridad es lo que lo hace diferente de otras opciones en este espacio.

UI de Dockhand Docker Manager mostrando dashboard de contenedores

Esto es lo que me llamo la atencion:

  • Escaneo de vulnerabilidades con Grype y Trivy integrado en la UI
  • Proteccion safe-pull: escanea nuevas imagenes antes de reemplazar contenedores en ejecucion
  • OIDC/SSO incluido en el nivel gratuito (Portainer cobra por esto)
  • Soporte MFA/TOTP para cuentas locales
  • Navegador de archivos de contenedor y terminal web
  • Auto-actualizaciones programadas con rollback automatico si algo se rompe
  • Logging de actividad para cada accion
  • Notificaciones via SMTP y Apprise
  • Zero telemetria. Nada llama a casa

La imagen de contenedor esta construida desde cero usando paquetes Wolfi via apko. Sin capa base Alpine o Debian con paquetes que no necesitas. Menor superficie de ataque por diseno.

Una cosa a saber: Dockhand usa licencia BSL 1.1. Gratis para uso personal y de negocios internos. No puedes revenderlo como servicio hosteado. La licencia se convierte a Apache 2.0 en 2029. Para self-hosting, esto no importa.

Requisitos previos

Necesitas:

  • Un servidor Linux (VPS o local). Uso Hetzner para hosting VPS
  • Docker y Docker Compose instalados
  • Funciona en amd64 y arm64 (Raspberry Pi 4 incluido)
Hetzner VPS DigitalOcean $100 Gratis Vultr $100 Gratis

O usa un Mini PC como servidor casero.

Instalar Docker

Si Docker no esta configurado aun:

sudo apt-get update
sudo apt-get install ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  jammy stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin docker-compose

Recorrido completo: Instalar Docker y Docker-compose para Ubuntu.

Instalar Dockhand con Docker Compose

Tienes tres opciones dependiendo de tus necesidades: un comando unico rapido, compose basado en SQLite, o compose con PostgreSQL. Cubrire las tres.

Instalacion rapida (comando unico)

Si solo quieres probar:

docker run -d \
  --name dockhand \
  --restart unless-stopped \
  -p 3000:3000 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dockhand_data:/app/data \
  fnsys/dockhand:latest

Eso es todo. Abre http://ip-de-tu-servidor:3000 y crea tu cuenta de administrador. Para una configuracion permanente, usaria uno de los metodos compose de abajo.

Docker Compose con SQLite (recomendado para la mayoria)

Crea un directorio y archivo compose:

mkdir -p /opt/dockhand
cd /opt/dockhand

Crea compose.yaml:

services:
  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data
volumes:
  dockhand_data:

Inicia:

docker compose up -d

Abre http://ip-de-tu-servidor:3000. El asistente de primera ejecucion te guia para crear una cuenta de administrador. SQLite es la base de datos por defecto y funciona bien para configuraciones de servidor unico. Los datos viven en el volumen dockhand_data.

Docker Compose con PostgreSQL

Si gestionas muchos contenedores o quieres la base de datos ejecutandose separadamente para propositos de backup, usa PostgreSQL:

services:
  postgres:
    image: postgres:16-alpine
    container_name: dockhand-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: dockhand
      POSTGRES_PASSWORD: cambia-esta-contrasena
      POSTGRES_DB: dockhand
    volumes:
      - postgres_data:/var/lib/postgresql/data

  dockhand:
    image: fnsys/dockhand:latest
    container_name: dockhand
    restart: unless-stopped
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://dockhand:cambia-esta-contrasena@postgres:5432/dockhand
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - dockhand_data:/app/data
    depends_on:
      - postgres

volumes:
  postgres_data:
  dockhand_data:

Cambia la contrasena de la base de datos

Reemplaza cambia-esta-contrasena en ambos campos POSTGRES_PASSWORD y DATABASE_URL con una contrasena fuerte real. Usa la misma contrasena en ambos lugares.

Configurar escaneo de vulnerabilidades

Esta es una de las mejores features de Dockhand y esta incluida en el nivel gratuito. Puedes escanear tus imagenes de contenedor por vulnerabilidades conocidas usando Grype o Trivy.

Despues de iniciar sesion, ve a la pagina de configuracion y habilita el escaneo de vulnerabilidades. Elige tu escaner:

Grype es la opcion por defecto. Es rapido, desarrollado por Anchore, y obtiene datos de vulnerabilidades de multiples fuentes. Los escaneos corren contra tus imagenes locales sin enviar nada a servidores externos.

Trivy de Aqua Security es la otra opcion. Soporta mas objetivos de escaneo (paquetes OS, dependencias especificas de lenguaje, archivos IaC) pero es ligeramente mas lento. Si necesitas escaneo mas profundo mas alla de imagenes de contenedor, Trivy es la mejor opcion.

La feature safe-pull se vincula al escaneo. Cuando Dockhand auto-actualiza un contenedor, descarga la nueva imagen, la escanea por vulnerabilidades, y solo cambia si el escaneo pasa. Si la nueva imagen tiene problemas, tu contenedor en ejecucion permanece intacto. Esto me atrapo dos actualizaciones de imagen malas en tres semanas.

Auto-actualizaciones programadas

Dockhand puede verificar por nuevas imagenes de contenedor en un horario y actualizarlas automaticamente. Combinado con la proteccion safe-pull mencionada arriba, esto es realmente utilizable en la practica. Digo “realmente utilizable” porque la mayoria de las herramientas de auto-actualizacion no verifican que la nueva imagen funcione antes de cambiarla.

Configura esto por contenedor o por stack en la UI. Eliges un horario (ej., diario a las 3am), y Dockhand maneja el resto. Si una actualizacion falla o el nuevo contenedor no inicia properly, hace rollback.

Configurar OIDC/SSO

El soporte OIDC es gratis en Dockhand. Sin nivel pago necesario. Si ejecutas Authentik, Keycloak, o cualquier otro proveedor OIDC, puedes configurar single sign-on.

En la UI de Dockhand, ve a Settings y configura tu proveedor OIDC con:

  • Client ID
  • Client secret
  • Issuer URL / Discovery URL

Los usuarios son aprovisionados automaticamente en el primer login. Una vez que OIDC funciona, puedes ocultar el login con contrasena local configurando la variable de entorno DISABLE_LOCAL_LOGIN. Asi los usuarios solo pueden autenticarse a traves de tu proveedor de identidad.

MFA es separado de OIDC

Si estas usando cuentas locales en lugar de OIDC, Dockhand soporta MFA basado en TOTP. Cada usuario puede habilitarlo desde la configuracion de su perfil. Si estas usando OIDC, MFA es manejado por tu proveedor de identidad.

Configuracion de proxy inverso

Dockhand corre en el puerto 3000 por defecto. Para SSL y un dominio proper, pon un proxy inverso frente a el. El soporte WebSocket es necesario para logs de contenedor en vivo y metricas.

server {
    listen 443 ssl http2;
    server_name dockhand.tudominio.com;

    ssl_certificate /ruta/a/cert.pem;
    ssl_certificate_key /ruta/a/key.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Agrega labels al servicio Dockhand en tu archivo compose:

labels:
  - "traefik.enable=true"
  - "traefik.http.routers.dockhand.rule=Host(`dockhand.tudominio.com`)"
  - "traefik.http.routers.dockhand.entrypoints=websecure"
  - "traefik.http.routers.dockhand.tls.certresolver=letsencrypt"
  - "traefik.http.services.dockhand.loadbalancer.server.port=3000"

Configuracion completa de Traefik: Como usar Traefik como proxy inverso en Docker.

Apunta un tunnel a http://localhost:3000. El manejo de SSL y WebSocket es automatico. Esta es la opcion mas facil si no quieres gestionar certificados o abrir puertos.

Gestionar hosts remotos con Hawser

Dockhand puede gestionar Docker en maquinas remotas a traves del agente Hawser. Lo que hace interesante a Hawser es la traversia NAT. El agente hace conexiones solo salientes, asi que no necesitas abrir ningun puerto en la maquina remota. Funciona detras de firewalls y NAT sin configuracion especial de red.

Hawser es open source (Go), separado de Dockhand mismo.

Para configurarlo:

  1. En Dockhand, ve a Environments y crea un nuevo host remoto. Esto genera un token
  2. En la maquina remota, despliega Hawser:
docker run -d \
  --name hawser \
  --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock \
  fnsys/hawser:latest \
  --token TU_TOKEN \
  --server https://dockhand.tudominio.com

El agente se conecta a tu instancia de Dockhand y el host remoto aparece en tu dashboard. Auth basado en token, auto-reconexion en problemas de red. Hay modos Standard y Edge dependiendo de si la maquina remota tiene conectividad consistente.

Referencia de variables de entorno

VariableDefaultQue hace
DATABASE_URLSQLiteString de conexion PostgreSQL
PUID / PGID1000Usuario/grupo para propiedad de archivos
DISABLE_LOCAL_LOGINfalseOcultar login con contrasena cuando SSO esta activo
SKIP_DF_COLLECTIONfalseSaltar recoleccion de uso de disco (util en dispositivos NAS)
DATA_DIR/app/dataRuta de directorio de datos personalizado

Solucion de problemas

Logs de contenedor muestran permission denied

Verifica que los valores PUID y PGID coinciden con un usuario con acceso al socket Docker. En la mayoria de sistemas, el socket Docker pertenece al grupo docker. Encuentra el ID del grupo con:

getent group docker

Usa ese GID como tu valor PGID.

Escaneos de vulnerabilidades fallan o timeout

El primer escaneo toma mas tiempo porque Grype o Trivy necesita descargar la base de datos de vulnerabilidades. Escaneos subsecuentes son mas rapidos. Si sigue timeout, verifica que el contenedor tiene acceso a internet (resolucion DNS, HTTPS saliente).

Dockhand usa mucha CPU en mi NAS

Configura SKIP_DF_COLLECTION=true en tus variables de entorno. La recoleccion de uso de disco puede ser pesada en ciertos dispositivos NAS con muchos puntos de montaje.

El agente Hawser no se conecta

Verifica que el token es correcto y la URL de Dockhand es alcanzable desde la maquina remota. Hawser hace conexiones HTTPS salientes, asi que la maquina remota necesita poder alcanzar tu instancia de Dockhand en el puerto 443. Revisa las reglas de firewall en el trafico saliente de la maquina remota.

Precios

Vale la pena ser claro sobre esto. Dockhand tiene un modelo de precios escalonado:

NivelCostoQue obtienes
Gratis$0Features completas para uso homelab, OIDC/SSO incluido
SMB$499/host/anoSoporte comercial, actualizaciones prioritarias
Enterprise$1,499/host/anoRBAC, LDAP/AD, audit logging, soporte dedicado

El nivel gratuito es legitimo full-featured. OIDC, escaneo de vulnerabilidades, auto-actualizaciones, multi-host, todo incluido. Solo necesitas pagar si necesitas RBAC, LDAP o soporte comercial. Eso es mejor que lo que Portainer ofrece en el nivel gratuito.

Mi opinion despues de tres semanas

Dockhand es un producto v1 que no lo parece. La UI esta pulida, las features de seguridad funcionan bien, y el ritmo de actualizaciones muestra que el equipo esta enviando activamente.

La feature safe-pull es mi cosa favorita de el. Configure auto-actualizaciones en todos mis contenedores no criticos y deje que corra. Atrapo dos actualizaciones de imagen malas escaneandolas antes de desplegar. Ambas veces, mis contenedores en ejecucion quedaron intactos mientras las nuevas imagenes fueron marcadas.

Lo que me da pausa es la edad del proyecto. Setenta y cuatro commits, siete contribuidores, primer release hace dos meses. Arcane ha estado desde 2022 con mas de 1,800 commits y 35 contribuidores. Ese tipo de madurez toma tiempo de construir, y habra casos extremos que Dockhand aun no ha encontrado.

Si las features de seguridad son tu prioridad y puedes tolerar un proyecto mas nuevo, Dockhand vale la pena instalar. Si quieres algo mas probado en batalla, revisa como instalar Arcane. Y si quieres una plataforma todo en uno que agrupa gestion de contenedores con backups, configuracion de proxy inverso y monitoreo, revisa UsulNet.

Articulos relacionados