Aller au contenu principal

Intégration Docker pour Gladys Assistant

Intégration Docker pour Gladys Assistant

Démarrez, arrêtez, redémarrez et surveillez les conteneurs Docker de votre serveur.

Gérez les conteneurs Docker de votre serveur depuis Gladys : voyez s'ils tournent, démarrez-les et arrêtez-les depuis un tableau de bord ou une scène, redémarrez-les depuis l'écran de configuration, et suivez leur consommation CPU et mémoire.

Comment l'intégration joint Docker

Gladys exécute chaque intégration externe dans un conteneur isolé qui ne peut monter aucun chemin de votre hôte, et /var/run/docker.sock est un chemin de l'hôte. Cette intégration n'utilise donc pas la socket Docker : elle dialogue avec l'API Docker Engine par le réseau, à une adresse que vous fournissez.

Vous avez deux façons d'exposer cette API. La première est fortement recommandée.

Option A — un proxy de socket (recommandé)

Un proxy de socket se place devant la socket Docker et ne relaie que les appels que vous autorisez. Même si quelqu'un d'autre sur votre réseau l'atteignait, il ne pourrait pas créer un conteneur privilégié sur votre hôte.

Ajoutez ceci à un docker-compose.yml sur la machine qui fait tourner vos conteneurs :

services:
docker-proxy:
image: ghcr.io/tecnativa/docker-socket-proxy:0.3.0
restart: unless-stopped
ports:
- '2375:2375'
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
CONTAINERS: 1 # lister les conteneurs (obligatoire)
POST: 1 # autoriser démarrage / arrêt / redémarrage

Puis docker compose up -d, et utilisez http://<ip-de-cette-machine>:2375 comme adresse ci-dessous.

Deux remarques sur ces permissions :

  • CONTAINERS: 1 seul donne une intégration en lecture seule : les états, le CPU et la mémoire fonctionnent, l'interrupteur On/Off et le bouton de redémarrage non.
  • POST: 1 est ce qui autorise le démarrage, l'arrêt et le redémarrage. Il est limité aux points d'entrée exposés par le proxy : il ne permet pas de créer des conteneurs.

Le proxy n'a pas d'authentification propre : publiez son port sur un réseau de confiance, jamais sur Internet.

Option B — le daemon Docker lui-même

Si votre daemon écoute déjà en TCP (-H tcp://0.0.0.0:2375, ou une entrée hosts dans /etc/docker/daemon.json), pointez l'intégration directement dessus. Attention : une API Docker non protégée donne un accès équivalent à root sur cette machine. Ne le faites que sur un réseau de confiance, et préférez l'option A.

Les adresses https:// sont supportées. Les certificats client (--tlsverify avec une paire de clés client) ne le sont pas : si votre daemon les exige, placez plutôt un proxy de socket devant lui.

Configuration

  1. Ouvrez l'onglet Configuration de l'intégration.
  2. Adresse de l'API Docker — par exemple http://192.168.1.10:2375. La forme tcp://hote:port utilisée par le CLI Docker et un simple hote:port sont également acceptés.
  3. Cliquez sur Tester la connexion Docker. La réponse indique la version de Docker et le nombre de conteneurs correspondant à vos filtres. Corrigez ce point avant d'aller plus loin : rien d'autre ne fonctionne tant qu'il échoue.
  4. Conteneurs à inclure / à exclure — des noms séparés par des virgules où * remplace n'importe quoi, par exemple media-*, nginx. Laisser la liste d'inclusion vide expose tous les conteneurs. La liste d'exclusion est appliquée en dernier et vaut gladys* par défaut : les conteneurs qui font tourner Gladys lui-même restent hors de portée — les piloter depuis Gladys reviendrait à pouvoir arrêter ce qui tient l'interrupteur.
  5. Cliquez sur Lister les conteneurs correspondants pour vérifier vos filtres avant d'enregistrer.
  6. Enregistrez : les conteneurs apparaissent dans l'onglet Découverte, prêts à être ajoutés.

Les autres réglages :

RéglageCe qu'il change
Proposer les conteneurs arrêtésSi les conteneurs actuellement arrêtés sont listés dans la Découverte.
Collecter CPU et mémoireAjoute un capteur CPU et un capteur mémoire à chaque conteneur. Coûte environ une seconde de daemon par rafraîchissement.
Intervalle de rafraîchissementFréquence de mise à jour de l'état et des capteurs d'un conteneur. Gladys interroge un appareil au plus lentement une fois par minute : les choix vont de 10 secondes à 1 minute.
Intervalle de découverteFréquence de relecture de la liste, pour que les conteneurs créés ensuite apparaissent d'eux-mêmes. C'est le minuteur propre à l'intégration, sans rapport avec l'intervalle de rafraîchissement.
Délai d'arrêtLe temps laissé par Docker à un conteneur pour s'arrêter avant de le tuer.

À quoi ressemble un conteneur dans Gladys

FonctionnalitéCe qu'elle fait
RunningBadge en lecture seule : allumé ou éteint. Garde son historique et sert de condition dans une scène (« si le conteneur tourne »).
Étatrunning, exited, restarting, paused
Start / Stop / RestartUn bouton poussoir chacun. Toujours les trois : Gladys ne sait pas masquer une fonctionnalité selon l'état, mais appuyer sur Start quand le conteneur tourne ne fait rien (Docker répond « déjà démarré »).
ActionUn contrôle unique qui ne propose que ce qui a du sens à l'instant — Start si le conteneur est arrêté, Stop et Restart s'il tourne.
CPUPourcentage, même échelle que docker stats : 200 % = deux cœurs saturés.
MémoireMégaoctets, cache de pages exclu.

Les conteneurs créés par Docker Compose sont nommés projet · service ; les autres gardent leur nom de conteneur. La page de l'appareil affiche aussi l'image utilisée et, pour un conteneur Compose, son projet et son service.

Deux libellés viennent de Gladys et non de cette intégration. La ligne CPU s'intitule « Température » : Gladys n'a aucune catégorie CPU, la fonctionnalité emprunte donc celle dont l'icône est une puce de processeur — la valeur et son unité en pourcentage sont justes, seul le mot ne l'est pas. La ligne Running s'intitule « Commutateur » pour la même raison. Les deux se renomment définitivement dans un tableau de bord, via le crayon du bloc « Appareils d'une pièce ».

Chaque appareil porte un badge local, qui passe à l'orange quand le conteneur mérite un coup d'œil — redémarrages en boucle, en pause, mort, ou en échec de son propre health check — et au gris quand le daemon n'est plus joignable.

Actions

  • Tester la connexion Docker — contacte le daemon et affiche sa version, sa plateforme et le nombre de conteneurs sélectionnés par vos filtres.
  • Lister les conteneurs correspondants — montre exactement ce que vos filtres d'inclusion et d'exclusion sélectionnent. Le moyen le plus rapide de comprendre pourquoi un conteneur apparaît ou non.
  • Redémarrer un conteneur — choisissez un de vos conteneurs et redémarrez-le, sans avoir à construire une scène arrêt-puis-démarrage.

Bon à savoir

  • Les conteneurs sont suivis par leur nom, pas par leur identifiant. Un docker compose up après une mise à jour d'image recrée le conteneur avec un identifiant tout neuf mais le même nom : vos appareils, leur historique et les scènes qui les utilisent survivent à la mise à jour.
  • Renommer un conteneur crée un nouvel appareil. Gladys voit l'ancien disparaître et un nouveau apparaître dans la Découverte.
  • Les conteneurs arrêtés restent pilotables. Masquer les conteneurs arrêtés ne change que ce que propose la Découverte ; un appareil déjà ajouté garde son interrupteur et peut être redémarré.
  • L'état publié est celui du daemon, pas celui demandé. Démarrez un conteneur qui plante au lancement et l'interrupteur revient sur off, parce que c'est ce que Docker rapporte.
  • Collecter CPU et mémoire n'est pas gratuit. Docker met environ une seconde à répondre à une demande de statistiques, par conteneur. Avec vingt conteneurs rafraîchis toutes les 10 secondes, le daemon passe plus de temps à répondre qu'au repos : laissez l'intervalle sur une minute sauf si vous avez peu de conteneurs, ou désactivez les statistiques.

En cas de problème

« Impossible de joindre l'API Docker » — l'adresse est fausse, le port n'est pas publié, ou un pare-feu bloque la connexion. Depuis une autre machine du même réseau, curl http://<adresse>/version doit répondre du JSON.

« Docker API returned a non-JSON body » — quelque chose a répondu, mais ce n'était pas une API Docker : le plus souvent un serveur web ou la page d'un routeur sur ce port.

« Docker API 403 » — un proxy de socket refuse l'appel. Ajoutez la permission qui manque : CONTAINERS: 1 pour lister, POST: 1 pour démarrer, arrêter et redémarrer.

Aucun conteneur dans la Découverte — cliquez sur Lister les conteneurs correspondants. Une réponse vide signifie que vos filtres excluent tout ; rappelez-vous que la liste d'exclusion vaut gladys* par défaut.

Le CPU manque mais la mémoire est là — il faut deux relevés consécutifs pour calculer un pourcentage CPU. Le premier manque juste après un démarrage ; le rafraîchissement suivant l'a.

L'intégration journalise tout ce qu'elle fait. Mettez LOG_LEVEL=debug pour voir chaque appel à l'API Docker, puis lisez les logs de l'intégration depuis l'interface de Gladys (ou docker logs sur l'hôte).

Paramètres de configuration

Voici les paramètres demandés par Docker dans son écran de configuration dans Gladys.

ParamètreTypeObligatoireDescription
Avant de commencersectionNonCette intégration tourne dans un conteneur isolé qui ne peut pas monter la socket Docker de votre hôte. Elle dialogue avec l'API Docker Engine via le réseau : exposez-la avec un proxy de socket à droits limités (recommandé) et collez son adresse ci-dessous. La procédure complète est dans la documentation.
Adresse de l'API DockerstringOuiAdresse de l'API Docker Engine, par exemple http://192.168.1.10:2375. https:// est supporté.
Accepter un certificat auto-signébooleanNonAdresses https uniquement : ne pas vérifier le certificat du serveur. À laisser désactivé sauf si votre proxy utilise un certificat auto-signé.
Conteneurs à inclurestringNonNoms de conteneurs séparés par des virgules, * autorisé (ex. media-*, nginx). Laissez vide pour exposer tous les conteneurs.
Conteneurs à exclurestringNonNoms de conteneurs séparés par des virgules, * autorisé. Appliqué après la liste d'inclusion — gardez-y vos conteneurs Gladys.
Proposer les conteneurs arrêtésbooleanNonLister aussi les conteneurs actuellement arrêtés dans l'onglet Découverte.
Collecter CPU et mémoirebooleanNonAjoute un capteur CPU et un capteur mémoire à chaque conteneur. Coûte environ une seconde de daemon par conteneur et par rafraîchissement.
Intervalle de rafraîchissementselectNonFréquence de rafraîchissement de l'état et des capteurs de chaque conteneur. Gladys n'interroge pas plus lentement qu'une fois par minute. Avec la collecte CPU et mémoire, chaque rafraîchissement coûte environ une seconde de daemon par conteneur : gardez-le lent si vous en gérez beaucoup.
Intervalle de découverte (s)numberNonFréquence de relecture de la liste des conteneurs, pour que les nouveaux apparaissent d'eux-mêmes. Sans rapport avec l'intervalle ci-dessus : c'est le minuteur propre à l'intégration.
Délai d'arrêt (s)numberNonDélai laissé par Docker à un conteneur pour s'arrêter avant de le tuer.

Comment installer Docker dans Gladys

  1. Dans Gladys, ouvrez Intégrations : Docker apparaît dans le catalogue, aux côtés des intégrations natives, avec un badge communautaire.
  2. Cliquez sur Installer. Gladys télécharge l'image Docker (ghcr.io/philippema/gladys-docker:1.0.1), la démarre dans un bac à sable isolé du cœur, et génère l'interface de l'intégration (appareils, découverte et configuration).
  3. Ouvrez l'écran Configuration de l'intégration, remplissez les paramètres, puis enregistrez.
  4. Vous pouvez aussi l'installer directement depuis l'URL de son dépôt : https://github.com/PhilippeMA/gladys-docker.

Docker nécessite Gladys >=4.86.0. Le catalogue dans Gladys se rafraîchit toutes les heures : une nouvelle version est donc disponible au plus tard une heure après sa sortie.

Vous n'utilisez pas encore Gladys ? C'est gratuit et open source : suivez le guide d'installation pour démarrer.

À propos des intégrations externes

Docker est une intégration externe : une intégration communautaire empaquetée dans un conteneur Docker et publiée sur GitHub, que Gladys installe en un clic et exécute dans un bac à sable isolé de son cœur. Elle est publiée et maintenue par PhilippeMA, et non par l'équipe cœur de Gladys.

Inscrivez-vous à la newsletter Gladys Assistant

Quelques emails par mois sur les nouveautés et l'actualité du projet. Envoyés par Pierre-Gilles Leymarie, le fondateur du projet. Désinscription possible à tout moment 🙂