Aujourd'hui petit tuto pour installer Dockhand avec une base PostgreSQL et le socket Proxy sécurisé sur un Synology.
Logiciel à la mode en ce moment sur les sites d'information.
Personnellement, je n'ai pas d'avis, je vous laisse le choix de dire le meilleur entre Portainer, Arcane, Dockhand ou Container Manager (voir l'article https://www.cachem.fr/dockhand-arcane-portainer/ )
/volume1/docker/dockhand/data et /volume1/docker/dockhand/postgres
Ou via SSH
Le réseau socket-proxy est interne (pas d'accès Internet) pour isoler le socket Docker. Impossible à faire via Container Manager.
Le réseau dockhand-internal permet la communication entre les services. Possible via Container Manager
Vérification :
Vous devriez voir :
Il existe plein de solution de génération de clés, je ne détaille pas.
Ensuite placer le fichier .env dans /volume1/docker/dockhand
Points importants :
À la première connexion, aucune authentification n'est requise. Vous devez immédiatement activer l'authentification :

Vous devriez voir : Connection successful
Bon test à tous.
Logiciel à la mode en ce moment sur les sites d'information.
Personnellement, je n'ai pas d'avis, je vous laisse le choix de dire le meilleur entre Portainer, Arcane, Dockhand ou Container Manager (voir l'article https://www.cachem.fr/dockhand-arcane-portainer/ )
Objectif
Déployer Dockhand (gestionnaire Docker web) sur un NAS Synology avec :- Base de données PostgreSQL (performances optimales)
- Socket Proxy pour sécuriser l'accès au socket Docker
- Chiffrement des credentials avec AES-256
- Optimisations spécifiques Synology
- Accès réseau local uniquement
Prérequis
- Synology DSM 7.x
- Container Manager installé (via Package Center)
- Accès SSH activé (Panneau de configuration → Terminal & SNMP)
- Connaissances de base en SSH et Docker
Etape 1 Créer la structure de dossiers
Via File Station/volume1/docker/dockhand/data et /volume1/docker/dockhand/postgres
Ou via SSH
Bash:
# Créer le dossier principal et les sous-dossiers
sudo mkdir -p /volume1/docker/dockhand/{data,postgres}
Etape 2 Créer les réseaux Docker
Pourquoi créer les réseaux manuellement et non via Container Manager ?Le réseau socket-proxy est interne (pas d'accès Internet) pour isoler le socket Docker. Impossible à faire via Container Manager.
Le réseau dockhand-internal permet la communication entre les services. Possible via Container Manager
Bash:
# Créer le réseau interne pour le socket proxy (SANS accès Internet)
sudo docker network create socket-proxy --internal
# Créer le réseau pour la communication entre services
sudo docker network create dockhand-internal
Vérification :
Bash:
sudo docker network ls | grep -E "socket-proxy|dockhand-internal"
Vous devriez voir :
Markdown (GitHub flavored):
NETWORK ID NAME DRIVER SCOPE
xxxxx socket-proxy bridge local
yyyyy dockhand-internal bridge local
Etape 3 Créer le fichier .env
Sur votre pc via un fichier texte indiquer cela :
Code:
# Mot de passe PostgreSQL
DB_PASSWORD=VOTRE_MOT_DE_PASSE_POSTGRES_ICI
# Clé de chiffrement Dockhand
ENCRYPTION_KEY=VOTRE_CLE_CHIFFREMENT_ICI
Il existe plein de solution de génération de clés, je ne détaille pas.
Ensuite placer le fichier .env dans /volume1/docker/dockhand
Etape 4 Créer le stack
Via Container Manager créer un nouveau projet :- Nom du projet = jotty
- Chemin = /volume1/docker/jotty/
- Source = Créer un fichier docker-compose.yml et copier cela :
YAML:
version: '3.8'
services:
# PostgreSQL
postgres:
image: postgres:16-alpine
container_name: dockhand-postgres
restart: unless-stopped
environment:
- POSTGRES_DB=dockhand
- POSTGRES_USER=dockhand
- POSTGRES_PASSWORD=${DB_PASSWORD}
volumes:
- /volume1/docker/dockhand/postgres:/var/lib/postgresql/data
networks:
- dockhand-internal
security_opt:
- no-new-privileges:true
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dockhand"]
interval: 10s
timeout: 5s
retries: 5
# Socket Proxy - LA BARRIÈRE DE SÉCURITÉ
socket-proxy:
image: tecnativa/docker-socket-proxy:v0.4.2
container_name: dockhand-socket-proxy
restart: unless-stopped
environment:
# Permissions minimales
- CONTAINERS=1
- IMAGES=1
- NETWORKS=1
- VOLUMES=1
- EVENTS=1
- POST=1
- DELETE=1
- INFO=1
- SYSTEM=1
- ALLOW_START=1
- ALLOW_STOP=1
- ALLOW_RESTARTS=1
# Terminal (désactive si tu n'en as pas besoin)
- EXEC=0 # Mettre à 0 pour désactiver l'accès terminal
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # READ ONLY !
networks:
- socket-proxy
security_opt:
- no-new-privileges:true
# Dockhand
dockhand:
image: fnsys/dockhand:latest
container_name: dockhand
restart: unless-stopped
ports:
- "4789:3000"
depends_on:
postgres:
condition: service_healthy
socket-proxy:
condition: service_started
environment:
- PUID=1026 # Ton PUID à modifier si besoin
- PGID=100 # Ton PGID à modifier si besoin
- DATA_DIR=/app/data
- DATABASE_URL=postgres://dockhand:${DB_PASSWORD}@postgres:5432/dockhand
- SKIP_DF_COLLECTION=true # Important pour Synology
- ENCRYPTION_KEY=${ENCRYPTION_KEY}
volumes:
- /volume1/docker/dockhand/data:/app/data
networks:
- dockhand-internal
- socket-proxy
security_opt:
- no-new-privileges:true
networks:
socket-proxy:
external: true # Pas d'accès Internet
dockhand-internal:
external: true
- Si votre UID n'est pas 1026, modifiez PUID=1026 avec votre valeur
- Le port 4789 est personnalisable (changez si déjà utilisé)
- EXEC=0 désactive l'accès terminal aux containers (mettez 1 si vous le voulez)
Etape 5 Démarrer Dockhand
Configuration initiale de Dockhand
1. Accéder à l'interface web
Ouvrez votre navigateur : http://IP_DE_VOTRE_NAS:4789Remplacez IP_DE_VOTRE_NAS par l'IP locale de votre Synology (ex : 192.168.1.10)
2. Première connexion (pas d'authentification par défaut)
SÉCURITÉ IMPORTANTE :À la première connexion, aucune authentification n'est requise. Vous devez immédiatement activer l'authentification :
- Cliquez sur
Settings (en haut à droite) - Allez dans Authentication
- Activez Enable authentication
- Créez votre compte admin :
- Username : votre_nom
- Password : mot de passe fort
- Email : votre@email.com
- Cliquez sur Save
- Reconnectez-vous avec vos identifiants
3. Activer MFA (Authentification à deux facteurs) - RECOMMANDÉ
- Une fois connecté, cliquez sur votre avatar (en haut à droite)
- Allez dans Profile
- Section Security → Cliquez sur Enable MFA
- Scannez le QR code avec votre application préféré.
- Entrez le code à 6 chiffres pour confirmer
- SAUVEGARDEZ LES CODES DE RÉCUPÉRATION (affichés une seule fois !)
4. Configurer l'environnement Docker
- Allez dans
Settings → Environments - Éditez l'environnement "default" (ou créez-en un nouveau)
- Configurez :
- Connection type : Direct (HTTP/HTTPS)
- Host : socket-proxy:2375
- Protocol : HTTP (c'est sécurisé car réseau interne)
- Name : "Synology Local" (ou autre nom)
- Cliquez sur Save
- Cliquez sur Test connexion pour vérifier

Vous devriez voir : Connection successful
Pourquoi cette configuration est sécurisée ?
| Composant | Sécurité apportée |
|---|---|
| Socket Proxy | Filtre les commandes Docker dangereuses (empêche --privileged, modifications système, etc.) |
| Socket READ-ONLY | Le socket Docker est monté en :ro, impossible de le modifier |
| Réseau interne | Le socket-proxy est sur un réseau SANS accès Internet |
| Port local uniquement | Port 3789 accessible uniquement depuis votre réseau local (pas d'exposition Internet) |
| PostgreSQL isolé | Base de données sur réseau interne, pas de port exposé |
| Chiffrement AES-256 | Tous les mots de passe/secrets sont chiffrés dans la base de données |
| no-new-privileges | Empêche l'escalade de privilèges dans les containers |
| SKIP_DF_COLLECTION | Optimisation pour Synology (évite les timeouts) |
Ressources
- Documentation officielle Dockhand : https://dockhand.pro/manual/
- GitHub Dockhand : https://github.com/Finsys/dockhand
- Socket Proxy : https://github.com/Tecnativa/docker-socket-proxy
Bon test à tous.