--- title: DockTail created: 2026-06-07 updated: 2026-06-07 type: app tags: [catalogue, vpn, tailscale, docker, declarative, go, auto-hebergement] confidence: high contested: false sources: [https://selfh.st/apps/?tag=VPN, https://github.com/marvinvr/docktail] --- # 🔐 DockTail > **L'auto-discovery Docker pour Tailscale** : exposez vos conteneurs en Tailscale Services simplement en ajoutant des **labels**, sans configuration manuelle. Le « Traefik du mesh VPN ». ## 📋 Informations GĂ©nĂ©rales | Champ | Valeur | | :--- | :--- | | **Site web** | (GitHub) | | **GitHub** | [marvinvr/docktail](https://github.com/marvinvr/docktail) | | **License** | MIT | | **Langage** | Go | | **Étoiles GitHub** | 759 ⭐ | | **DerniĂšre MAJ** | 2026-05 | | **CatĂ©gorie** | [[cat-vpn|VPN]] | ## 📝 Description **DockTail** est un petit binaire Go qui se branche sur le **socket Docker** et qui expose automatiquement vos conteneurs comme **Tailscale Services**, simplement en lisant des **labels Docker**. L'idĂ©e est la mĂȘme que ce que fait **Traefik** pour le HTTPS automatique : un contrĂŽleur dĂ©claratif qui surveille les Ă©vĂ©nements Docker et synchronise l'Ă©tat. ConcrĂštement, vous annotez un conteneur avec `docktail.enable=true` et `docktail.hostname=mon-app`, et DockTail crĂ©e automatiquement l'entrĂ©e correspondante dans votre **tailnet** (rĂ©seau Tailscale) — avec HTTPS automatique si vous utilisez [[app-headscale|Headscale]] + Tailscale, ou avec le HTTPS natif de Tailscale en SaaS. DockTail supporte aussi bien **Tailscale** que **Headscale** (controller self-hosted) : il suffit de pointer l'auth key vers la bonne instance. C'est un outil particuliĂšrement utile pour les homelabs qui veulent bĂ©nĂ©ficier de la simplicitĂ© de Tailscale (MagicDNS, HTTPS auto, ACL) sur leur stack Docker, sans avoir Ă  maintenir manuellement un mapping port ↔ service. **Public cible** : utilisateurs Tailscale/Headscale qui ont une stack Docker et qui veulent Ă©viter de dupliquer la config rĂ©seau entre leurs `docker-compose.yml` et le panneau Tailscale. - ✅ **Approche dĂ©clarative** : piloter par labels, comme Traefik - ✅ **Watch Docker events** : ajout/retrait de conteneur, scale up/down - ✅ **Support Tailscale ET Headscale** : self-hosted friendly - ✅ **HTTPS automatique** : via Let's Encrypt + Tailscale - ✅ **Binaire unique Go** : pas de runtime, image Docker lĂ©gĂšre - ✅ **Multi-host** : un seul DockTail peut piloter des services sur plusieurs tailnets - ✅ **Filtrage par labels** : `docktail.enable=true` pour opt-in - ✅ **ACL Tailscale** : exploite les ACL existantes du tailnet - ✅ **ZĂ©ro base de donnĂ©es** : state directement dans Tailscale - ✅ **Healthcheck** intĂ©grĂ© ## 🚀 Installation ### Docker Compose (mode sidecar) ```yaml # docker-compose.yml version: '3.8' services: docktail: image: ghcr.io/marvinvr/docktail:latest container_name: docktail restart: unless-stopped environment: - TAILSCALE_AUTHKEY=tskey-auth-xxxxxxxxxxxxx - TAILSCALE_HOSTNAME=docktail-gateway - DOCKTAIL_DOCKER_HOST=unix:///var/run/docker.sock - DOCKTAIL_TAILNET=tail.ts.net # ou votre domaine Headscale - DOCKTAIL_DEFAULT_TAGS=tag:container - DOCKTAIL_HTTPS=true volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - docktail-state:/var/lib/tailscale labels: - "traefik.enable=false" # DockTail parle directement Ă  Tailscale # Exemple : service exposĂ© automatiquement via DockTail whoami: image: traefik/whoami container_name: whoami labels: - "docktail.enable=true" - "docktail.hostname=whoami.tail.ts.net" - "docktail.port=80" - "docktail.https=true" volumes: docktail-state: ``` > **Note** : DockTail a besoin d'un **auth key Tailscale** (ou Headscale) avec les permissions `device:write` et `services:write`. Le socket Docker est montĂ© **en lecture seule**. Le `docker.sock` doit ĂȘtre accessible — sur Mac/Windows avec Docker Desktop, ajuster le chemin ou activer le socket TCP. ## ⚙ Configuration Initiale 1. **GĂ©nĂ©rer un auth key** Tailscale/Headscale rĂ©utilisable (reusable + ephemeral OK, mais **non-ephemeral** recommandĂ© pour le service DockTail lui-mĂȘme) 2. **DĂ©ployer DockTail** avec le socket Docker montĂ© et l'auth key 3. **VĂ©rifier l'authentification** : `docker logs docktail` doit afficher `logged in` et le hostname apparaĂźtre dans `tailscale status` 4. **Annoter un premier conteneur** : ajouter `docktail.enable=true` et `docktail.hostname=mon-app.tail.ts.net` Ă  un `docker-compose.yml` existant 5. **RedĂ©ployer** : `docker compose up -d` — DockTail dĂ©tecte le label et crĂ©e automatiquement le service Tailscale 6. **Tester** : `https://mon-app.tail.ts.net` doit rĂ©pondre depuis n'importe quel client du tailnet, avec HTTPS valide ## 🔄 Alternatives ### Open Source - [[app-tailscale]] — Le client mesh VPN lui-mĂȘme - [[app-headscale]] — Controller Tailscale self-hosted - [[app-traefik]] — Équivalent pour le HTTPS « Internet », pas mesh - **tsnet** (lib Go Tailscale) — Approche plus bas niveau, pas dĂ©clarative - **caddy-tailscale** — Plugin Caddy + Tailscale (pas d'auto-discovery Docker) - **k8s-ingress-tailscale** — Variante Kubernetes - **glauth** — Pas VPN, mais approche dĂ©clarative comparable ### Comparaison DockTail vs approches manuelles | CritĂšre | DockTail | Manuel (`tailscale serve`) | Tailscale Provider (Traefik) | Annotations k8s | | :--- | :--- | :--- | :--- | :--- | | Self-hosted friendly | ✅ | ✅ | ✅ | ✅ | | DĂ©couverte auto Docker | ✅ | ❌ | Partielle (Traefik) | ❌ (k8s) | | Configuration | Labels YAML | CLI Ă  la main | Providers Traefik | Ingress k8s | | HTTPS auto | ✅ | ✅ (Tailscale) | ✅ | ✅ | | MagicDNS | ✅ | ✅ | ✅ | ✅ | | Licence | MIT | BSD-3 | MIT | Apache-2.0 | | Cible | Docker Compose | Bare-metal | Stack Traefik | Kubernetes | **Verdict** : DockTail est **le chaĂźnon manquant** entre Docker et Tailscale pour les stacks `docker-compose`. C'est l'Ă©quivalent exact de ce que Traefik fait pour le reverse proxy, mais dans le monde du mesh VPN. Pour un homelab Docker + Tailscale, c'est l'outil le plus ergonomique. ### PropriĂ©taires (ce que DockTail complĂšte) - **Tailscale** (SaaS) — DockTail est un add-on, pas un remplaçant - **Cloudflare Tunnel** + WARP — Approche concurrente - **ngrok** (commercial) — Tunneling classique, pas mesh - **Cato Networks**, **Zscaler** — SD-WAN entreprise ## 🔐 SĂ©curitĂ© - **Cryptographie** : hĂ©rite intĂ©gralement de **Tailscale** / **Headscale** — WireGuard pour le transport (ChaCha20-Poly1305, Curve25519), Noise protocol pour le handshake, certificats courts automatiquement renouvelĂ©s. DockTail n'implĂ©mente **aucun crypto** lui-mĂȘme, il orchestre. - **ClĂ©s privĂ©es** : la clĂ© Tailscale du node DockTail est stockĂ©e dans `/var/lib/tailscale`, dans un volume Docker. **Chiffrement au repos** recommandĂ© (LUKS, ZFS natif) puisque cette clĂ© donne accĂšs au tailnet. - **Auth key** : l'auth key Tailscale est trĂšs sensible — un attaquant qui l'obtient peut enregistrer un node Ă  votre place. Stocker dans un **secrets manager** (Doppler, Vault, ou variable chiffrĂ©e) plutĂŽt qu'en clair dans le `docker-compose.yml`. - **Socket Docker** : DockTail a besoin de **lire** les Ă©vĂ©nements Docker. Monter `docker.sock` en `:ro` (lecture seule) ne suffit pas Ă  empĂȘcher un RCE si l'image est compromise. Solution : utiliser un **proxy Docker socket** (Tecnativa/docker-socket-proxy) avec filtre. - **ACL Tailscale** : configurer des **tags** sur les services exposĂ©s (`docktail.tags=tag:web`) et restreindre dans l'ACL Tailscale qui peut y accĂ©der. Le tag `tag:container` est volontairement restrictif. - **HTTPS obligatoire** : `DOCKTAIL_HTTPS=true` garantit que les services sont servis en TLS, avec certificats auto-gĂ©rĂ©s par Tailscale. - **Audit** : les Ă©vĂ©nements Docker sont journalisĂ©s, et l'API Tailscale trace toutes les crĂ©ations/modifications de services. - **Ephemeral vs persistent** : utiliser un auth key **non-ephemeral** pour DockTail lui-mĂȘme (sinon le node disparaĂźt aprĂšs expiration), et **ephemeral** pour les services jetables. ## 📚 Ressources - [GitHub marvinvr/docktail](https://github.com/marvinvr/docktail) - [Tailscale — Service documentation](https://tailscale.com/kb/1281/services/) - [Headscale — service exposure](https://headscale.net/) - [Docker socket proxy — Tecnativa](https://github.com/Tecnativa/docker-socket-proxy) - [Blog selfh.st — Docker + Tailscale](https://selfh.st/) ## Pages LiĂ©es - [[cat-vpn]] — CatĂ©gorie VPN - [[app-wireguard]] — Le transport utilisĂ© par Tailscale - [[app-tailscale]] — Le client mesh VPN pilotĂ© - [[app-headscale]] — Controller self-hosted compatible - [[app-traefik]] — L'inspiration conceptuelle (labels dĂ©claratifs) - [[securisation-home-lab]] — Bonnes pratiques sĂ©curitĂ©