Quand on administre plusieurs serveurs Docker, on finit vite avec le même petit rituel :
- 🔹une session SSH ici
- 🔹un
docker pslà - 🔹un
docker compose pull && docker compose up -dun peu partout
Ça marche. Mais ce n’est pas franchement confortable.
C’est pour ça que j’ai rapidement cherché un manager Docker capable de piloter les containers, les updates, les stacks Compose et les environnements depuis une interface propre. Le plus connu c’est Portainer.io, mais je n’ai jamais été totalement emballé. Avec le temps et pas mal de lecture sur ce sujet je suis tombé sur DockHand.
Dans mon besoin, je voulais aussi pouvoir installer des agents distant. Et là aussi, DockHand répond présent avec Hawser.
Voici donc le petit focus du jour : un manager et des agents pour les gouverner tous.
DockHand
Une interface moderne pour gérer containers, stacks Compose, logs, terminal et environnements Docker. Sous licence BSL 1.1, donc OK pour un usage personnel et interne.
Hawser
Un agent léger en Go qui sert de relais entre DockHand et un hôte Docker. Il propose deux modes de connexion : Standard ou Edge.
Multi-serveurs
Un seul manager pour plusieurs machines Docker, même quand elles ne sont pas dans le même réseau.
Pourquoi DockHand plutôt que Portainer ?
Portainer.io reste un outil connu, installé partout, et il rend service. Je ne vais pas refaire l’histoire.
Mais à l’usage, DockHand me parle davantage sur plusieurs points :
- 👉 une interface plus moderne et plus lisible
- 👉 une vraie orientation Docker Compose / stacks
- 👉 une gestion multi-environnements claire
- 👉 des logs temps réel et un terminal intégrés
- 👉 une approche plus directe pour gérer les hôtes distants avec Hawser
- 👉 du scan de vulnérabilités avec Grype et Trivy, même si l’actualité autour de Trivy est un peu sportive en ce moment.
Ce n’est pas une guerre de religion. Si Portainer fait le travail chez vous, très bien. De mon côté, il me manquait quelque chose. DockHand a ce côté plus fluide que j’aime bien : on arrive, on comprend vite où sont les containers, les stacks, les images, les volumes, les réseaux, les updates et les alertes. Bref, ça donne envie de s’en servir.
Le rôle de Hawser
DockHand peut gérer un Docker local via le socket, ou des hôtes distants. Hawser sert justement à éviter d’exposer directement l’API Docker sur Internet. L’agent parle au Docker local, puis DockHand passe par lui pour piloter l’environnement.
Hawser : Standard ou Edge ?
Hawser propose deux modes de fonctionnement.
| Mode | Principe | Cas typique |
|---|---|---|
| Standard | Hawser écoute sur le serveur Docker, DockHand vient se connecter dessus. | LAN, homelab, IP fixe, firewall maîtrisé. |
| Edge | Hawser initie une connexion WebSocket sortante vers DockHand. | VPS, NAT, IP dynamique, serveur derrière un firewall. |
Dans cet article, je pars sur Standard mode.
Pourquoi ? Parce que dans mon cas, tout se passe sur le réseau local.
DockHand peut donc joindre directement chaque serveur Docker sur le port de Hawser. Pas besoin de WebSocket sortant, pas besoin de traverser un NAT, pas besoin de rendre DockHand public juste pour rattacher une machine du LAN.
On reste simple : Hawser écoute sur le serveur Docker, DockHand vient se connecter dessus, et chacun garde sa place.
Standard mode
Le bon choix en réseau local : Hawser écoute sur le serveur Docker, DockHand s’y connecte directement.
Edge mode
Très pratique hors LAN : l’agent sort vers DockHand en WebSocket, sans port entrant à publier côté serveur Docker.
Prérequis
Pour ce tuto, je pars du principe que :
- ➡️ Docker est déjà installé sur le serveur distant ;
- ➡️ DockHand est déjà installé et fonctionnel ;
- ➡️ DockHand peut joindre le serveur Docker sur le réseau local ;
- ➡️ le port
2376est autorisé entre DockHand et le serveur Docker ; - ➡️ vous avez accès à l’interface DockHand pour créer un environnement Hawser Standard ;
Attention au Docker socket
Hawser a besoin d’accéder à /var/run/docker.sock. C’est puissant, donc sensible. En clair : si l’agent ou le container Hawser est compromis, votre Docker local peut l’être aussi. Même en LAN, on garde un token solide, on limite le port aux machines nécessaires, et on évite de publier ça sur Internet.
1. Préparer le serveur Docker distant
Sur le serveur où on installera l’agent Hawser, positionnez-vous là où vous avez l’habitude de créer vos configurations Docker et on prépare son arboressence :
sudo mkdir -p hawser/stacks
sudo chown -R "$USER":"$USER" hawser
sudo chmod 755 hawser
cd hawser
Ce dossier est important si vous voulez que DockHand puisse créer ou gérer des stacks Compose sur ce serveur via Hawser.
Chemins relatifs et volumes bind
Si vos stacks Compose utilisent des chemins relatifs du type ./config:/config, utilisez un vrai chemin hôte monté dans Hawser, avec le même chemin côté host et côté container. Le démon Docker résout les bind mounts côté serveur, pas dans l’imagination de l’interface.
2. Créer le token Hawser
En mode Standard, le token se crée côté agent Hawser.
Ensuite, on le renseignera dans DockHand pour que le manager puisse s’authentifier auprès de l’agent. Donc oui : dans ce scénario, on installe Hawser avant de finaliser la connexion dans DockHand.
On génère un token propre et on le place directement dans le fichier .env :
HAWSER_TOKEN="$(openssl rand -hex 32)"
printf 'HAWSER_TOKEN=%s\n' "$HAWSER_TOKEN" > .env
chmod 600 .env
echo "$HAWSER_TOKEN"
La valeur affichée par echo est celle qu’il faudra ensuite coller dans DockHand. Le fichier .env, lui, reste sur le serveur et sera utilisé par Docker Compose.
Le token, ce n’est pas pour décorer
Même sur un réseau local, évitez de lancer Hawser sans token. L’agent discute avec le Docker socket, donc on ne laisse pas n’importe quel client du LAN venir taper à la porte avec ses grosses chaussures.
3. Installer Hawser avec Docker Compose
On pourrait lancer Hawser avec un simple docker run, mais pour moi Docker Compose est plus propre.
On a un fichier lisible, versionnable, facile à relancer, facile à déplacer. Bref : moins de magie dans l’historique du terminal, plus de structure.
Toujours dans votre répertoire hawser, avec le fichier .env créé juste avant, créez le fichier docker-compose.yml :
sudo nano docker-compose.yml
Puis ajoutez :
services:
hawser:
image: ghcr.io/finsys/hawser:latest
container_name: hawser
restart: unless-stopped
env_file:
- .env
environment:
PORT: "2376"
TOKEN: "${HAWSER_TOKEN}"
AGENT_NAME: "srv-docker-01"
STACKS_DIR: "./stacks"
LOG_LEVEL: "info"
ports:
- "2376:2376"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./stacks:/opt/hawser-stacks
Puis on lance l’agent :
docker compose up -d
docker compose logs -f hawser
Si tout se passe bien, Hawser écoute maintenant sur 2376.
hawser | ╭─────────────────────────────────────╮
hawser | │ HAWSER AGENT │
hawser | │ Remote Docker Agent for │
hawser | │ Dockhand │
hawser | ╰─────────────────────────────────────╯
hawser | Version: 0.2.42 (3d997fa)
hawser | Agent ID: 79134fc8-c696-4c3a-85ca-7ec9b30e866f
hawser | Agent Name: test-uopslab
hawser | Docker Socket: /var/run/docker.sock
hawser | Log Level: INFO
hawser |
hawser | 2026/05/09 07:45:05 [INFO] Starting in Standard mode on port 2376
hawser | 2026/05/09 07:45:05 [INFO] Connected to Docker 29.4.1 (API 1.54)
hawser | 2026/05/09 07:45:05 [INFO] Starting HTTP server on 0.0.0.0:2376
Depuis la machine DockHand, vous pouvez déjà tester que le port répond avec l’IP ou le nom DNS de votre serveur Hawser :
nc -vz 0.0.0.0 2376
4. Déclarer l’agent dans DockHand
Maintenant que l’agent existe, on peut le déclarer dans DockHand.
On se connecte au portaiil web du manager DockHand :
- 1️⃣ Depuis le Dashboard principal ou dans Settings puis Environments, cliquez sur le bouton pour créer un nouvel environnement.
- 2️⃣ Remplissez comme vous le souhaitez le nom et les labels.
- 3️⃣ Choisissez le type de connexion Hawser - Standard.

- 4️⃣ Indiquez l’adresse de l’agent Hawser, confirmez le port, laissez le protocole
http, puis collez le token fraîchement créé dans le fichier.env.

Une fois que vous avez le sésame, le bouton de confirmation doit passer au vert.
Et là, avant de valider, vous pouvez vous promener dans les onglets suivants pour affiner le paramétrage, activer les notifications et le scan de vulnérabilités. Pas de panique, on pourra y revenir.
Et si on revient sur le dashboard principal, on a une vue d’ensemble de l’état de l’environnement Docker : le nombre de containers, les ressources, les updates en attente… C’est quand même bien plus stylé qu’un docker ps.
5. Manager avec DockHand
La liste de tout ce qu’on peut faire depuis DockHand est loin d’être exhaustive. Je pense d’ailleurs que je ferai un tuto dédié prochainement.
Les fonctions utiles après connexion
Select Tab
Piloter les containers
- ➡️ Voir les containers en temps réel.
- ➡️ Démarrer, arrêter ou redémarrer rapidement un service.
- ➡️ Suivre les ressources CPU / mémoire.
- ➡️ Garder un œil sur les images, volumes et networks.
- ➡️ Rechercher et lancer les mises à jours
Gérer les stacks Compose
- ➡️ Créer et modifier des stacks Docker Compose depuis l’interface.
- ➡️ Déployer sans jongler entre plusieurs fichiers ouverts en SSH.
- ➡️ Travailler depuis Git quand la stack doit rester versionnée.
- ➡️ Suivre les mises à jour plus proprement.
Exploiter sans sortir le bazooka
- ➡️ Consulter les logs directement depuis DockHand.
- ➡️ Ouvrir un shell dans un container si besoin.
- ➡️ Parcourir les fichiers côté container.
- ➡️ Diagnostiquer les petits soucis sans dégainer la session SSH réflexe.
Garder un minimum de garde-fous
- ➡️ Centraliser plusieurs environnements Docker.
- ➡️ Gérer les accès et les connexions Hawser avec token.
- ➡️ Activer le scan de vulnérabilités.
- ➡️ Gagner en visibilité sans prétendre remplacer une vraie politique de sécurité.
Piloter les containers
- ➡️ Voir les containers en temps réel.
- ➡️ Démarrer, arrêter ou redémarrer rapidement un service.
- ➡️ Suivre les ressources CPU / mémoire.
- ➡️ Garder un œil sur les images, volumes et networks.
- ➡️ Rechercher et lancer les mises à jours
Gérer les stacks Compose
- ➡️ Créer et modifier des stacks Docker Compose depuis l’interface.
- ➡️ Déployer sans jongler entre plusieurs fichiers ouverts en SSH.
- ➡️ Travailler depuis Git quand la stack doit rester versionnée.
- ➡️ Suivre les mises à jour plus proprement.
Exploiter sans sortir le bazooka
- ➡️ Consulter les logs directement depuis DockHand.
- ➡️ Ouvrir un shell dans un container si besoin.
- ➡️ Parcourir les fichiers côté container.
- ➡️ Diagnostiquer les petits soucis sans dégainer la session SSH réflexe.
Garder un minimum de garde-fous
- ➡️ Centraliser plusieurs environnements Docker.
- ➡️ Gérer les accès et les connexions Hawser avec token.
- ➡️ Activer le scan de vulnérabilités.
- ➡️ Gagner en visibilité sans prétendre remplacer une vraie politique de sécurité.
À retenir
DockHand + Hawser, avec son interface moderne, permettent de disposer d’une console centralisée pour rattacher et administrer plusieurs serveurs Docker. En fonction de votre architecture réseau et de vos contraintes de sécurité, vous pouvez choisir entre les modes Standard et Edge afin de maîtriser précisément les flux de communication.
Pour un homelab ou une petite infrastructure self-hosted en réseau local, le mode Hawser Standard est particulièrement pratique : lisible, direct et facile à diagnostiquer.
Un DockHand pour les gouverner tous 😉
Sources
Cet article vous a-t-il été utile ?
Votre retour aide à mieux choisir les prochains sujets.