﻿﻿{"id":2013,"date":"2026-01-07T15:18:53","date_gmt":"2026-01-07T14:18:53","guid":{"rendered":"https:\/\/elearningsamba.com\/index.php\/containernursery-mettez-vos-conteneurs-docker-en-veille-et-reveillez-les-sur-demande\/"},"modified":"2026-01-07T15:18:53","modified_gmt":"2026-01-07T14:18:53","slug":"containernursery-mettez-vos-conteneurs-docker-en-veille-et-reveillez-les-sur-demande","status":"publish","type":"page","link":"https:\/\/elearningsamba.com\/index.php\/containernursery-mettez-vos-conteneurs-docker-en-veille-et-reveillez-les-sur-demande\/","title":{"rendered":"ContainerNursery &#8211; Mettez vos conteneurs Docker en veille et r\u00e9veillez-les sur demande"},"content":{"rendered":"<p>Voil\u00e0 un outil qui va faire plaisir aux possesseurs de homelabs qui surveillent leur consommation de ressources comme le lait sur le feu !<\/p>\n<p>Car si vous \u00eates comme moi, vous avez probablement <strong>une ribambelle de conteneurs qui tournent H24<\/strong> sur votre b\u00e9cane. Et je vous raconte pas tous ceux qui tournent alors que je m&#8217;en sers qu&#8217;une fois par an&#8230; breeeef&#8230;<\/p>\n<p>Car m\u00eame si un processus en &#8220;idle&#8221; ne consomme pas forc\u00e9ment grand-chose, c&#8217;est quand m\u00eame un peu moisi de laisser tourner des services pour rien, non ? (oui, j&#8217;ai une \u00e2me d&#8217;\u00e9cologiste de la ressource syst\u00e8me).<\/p>\n<p>C&#8217;est l\u00e0 qu&#8217;intervient<br \/>\n<a href=\"https:\/\/github.com\/ItsEcholot\/ContainerNursery\">ContainerNursery<\/a><br \/>\n, un petit utilitaire \u00e9crit en Node.js qui se comporte comme un reverse proxy intelligent qui va tout simplement stopper vos instances Docker quand aucune requ\u00eate HTTP ou connexion WebSocket n&#8217;est d\u00e9tect\u00e9e pendant un certain temps, et les red\u00e9marrer d&#8217;un coup de baguette magique d\u00e8s qu&#8217;une nouvelle requ\u00eate pointe le bout de son nez.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/korben.info\/cdn-cgi\/image\/width=1200,fit=scale-down,quality=90,f=avif\/containernursery-mise-veille-conteneurs-docker\/containernursery-mise-veille-conteneurs-docker-2.png\" alt=\"\" loading=\"lazy\"><\/p>\n<p>Pour ceux qui se demandent s&#8217;il est possible de mettre en pause un conteneur proprement, sachez que ContainerNursery va plus loin que le simple <code>docker pause<\/code>. Il arr\u00eate carr\u00e9ment le conteneur pour lib\u00e9rer la RAM et \u00e9viter les r\u00e9veils CPU inutiles. Et il ne fait pas \u00e7a \u00e0 la sauvage puisqu&#8217;il v\u00e9rifie par exemple s&#8217;il n&#8217;y a pas de connexions WebSocket actives proxifi\u00e9es avant de tout couper.<\/p>\n<p>H\u00e9 oui, quand on n&#8217;est pas un connard, on \u00e9vite de d\u00e9connecter un utilisateur en plein milieu de sa session.<\/p>\n<div class=\"video-container\">\n<video controls preload=\"none\"><\/p>\n<p>Votre navigateur ne supporte pas la lecture de vid\u00e9os HTML5. Voici un<br \/>\n<a href=\"https:\/\/korben.info\/containernursery-mise-veille-conteneurs-docker\/containernursery-mise-veille-conteneurs-docker-1.mp4\">lien vers la vid\u00e9o<\/a>.<br \/>\n<\/video><\/p>\n<div>\n<p>D&#8217;ailleurs, pour ne pas faire fuir vos visiteurs pendant que le conteneur sort de sa sieste, l&#8217;outil affiche une page de chargement sympa qui se rafra\u00eechit toute seule d\u00e8s que votre serveur est pr\u00eat \u00e0 envoyer la sauce.<\/p>\n<p>C\u00f4t\u00e9 bidouille, on reste sur du classique. Tout se r\u00e8gle dans un fichier <code>config.yml<\/code>.<\/p>\n<p>En plus des domaines et des noms de conteneurs, vous devrez sp\u00e9cifier le <code>proxyHost<\/code> et le <code>proxyPort<\/code> pour que l&#8217;aiguillage se fasse correctement. Vous d\u00e9finissez ensuite le timeout au bout duquel tout le monde doit aller au dodo. Vous pouvez m\u00eame lui dire de ne pas couper si l&#8217;utilisation moyenne du CPU d\u00e9passe un certain seuil (exprim\u00e9 en pourcentage de 0 \u00e0 100 \u00d7 le nombre de c\u0153urs), histoire de ne pas flinguer un calcul lourd en cours.<\/p>\n<p>Pour le lancer, rien de plus simple :<\/p>\n<div class=\"highlight\">\n<pre class=\"chroma\"><code class=\"language-gdscript3\" data-lang=\"gdscript3\"><span class=\"line\"><span class=\"cl\"><span class=\"n\">docker<\/span> <span class=\"n\">run<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">--<\/span><span class=\"n\">name<\/span><span class=\"o\">=<\/span><span class=\"s1\">'ContainerNursery'<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">-<\/span><span class=\"n\">v<\/span> <span class=\"o\">\/<\/span><span class=\"k\">var<\/span><span class=\"o\">\/<\/span><span class=\"n\">run<\/span><span class=\"o\">\/<\/span><span class=\"n\">docker<\/span><span class=\"o\">.<\/span><span class=\"n\">sock<\/span><span class=\"p\">:<\/span><span class=\"o\">\/<\/span><span class=\"k\">var<\/span><span class=\"o\">\/<\/span><span class=\"n\">run<\/span><span class=\"o\">\/<\/span><span class=\"n\">docker<\/span><span class=\"o\">.<\/span><span class=\"n\">sock<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"o\">-<\/span><span class=\"n\">v<\/span> <span class=\"o\">\/<\/span><span class=\"n\">mnt<\/span><span class=\"o\">\/<\/span><span class=\"n\">ContainerNursery<\/span><span class=\"o\">\/<\/span><span class=\"n\">config<\/span><span class=\"p\">:<\/span><span class=\"o\">\/<\/span><span class=\"n\">usr<\/span><span class=\"o\">\/<\/span><span class=\"n\">src<\/span><span class=\"o\">\/<\/span><span class=\"n\">app<\/span><span class=\"o\">\/<\/span><span class=\"n\">config<\/span> \n<\/span><\/span><span class=\"line\"><span class=\"cl\"> <span class=\"n\">ghcr<\/span><span class=\"o\">.<\/span><span class=\"n\">io<\/span><span class=\"o\">\/<\/span><span class=\"n\">itsecholot<\/span><span class=\"o\">\/<\/span><span class=\"n\">containernursery<\/span><span class=\"p\">:<\/span><span class=\"n\">latest<\/span>\n<\/span><\/span><\/code><\/pre>\n<p>Petit rappel de s\u00e9curit\u00e9 quand m\u00eame&#8230; Essayez de placer un autre reverse proxy (genre Nginx ou Traefik) devant ContainerNursery pour g\u00e9rer le HTTPS proprement, car ce dernier \u00e9coute en HTTP par d\u00e9faut.<\/p>\n<p>Quant au gain sur votre facture d&#8217;\u00e9lectricit\u00e9, il d\u00e9pendra \u00e9videmment de la charge r\u00e9elle \u00e9vit\u00e9e, mais sur une grosse machine avec des dizaines de services, \u00e7a finit par compter.<\/p>\n<p>Bref, c&#8217;est le genre de petit outil qui ne paie pas de mine mais qui permet de gagner pas mal de temps et surtout d&#8217;optimiser ses ressources sans se prendre la t\u00eate. On garde bien s\u00fbr la vieille carabine de p\u00e9p\u00e9 sous le lit pour les urgences, mais pour le reste, on laisse <strong>ContainerNursery<\/strong> g\u00e9rer la cr\u00e8che.<\/p>\n<p>Un grand merci \u00e0 Micka\u00ebl pour l&#8217;info !<\/p>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Voil\u00e0 un outil qui va faire plaisir aux possesseurs de homelabs qui surveillent leur consommation de ressources comme le lait sur le feu ! Car si vous \u00eates comme moi, vous avez probablement une ribambelle de conteneurs qui tournent H24 sur votre b\u00e9cane. Et je vous raconte pas tous ceux qui tournent alors que je m&#8217;en sers qu&#8217;une fois par an&#8230; breeeef&#8230; Car m\u00eame si un processus en &#8220;idle&#8221; ne consomme pas forc\u00e9ment grand-chose, c&#8217;est quand m\u00eame un peu moisi de laisser tourner des services pour rien, non ? (oui, j&#8217;ai une \u00e2me d&#8217;\u00e9cologiste de la ressource syst\u00e8me). C&#8217;est l\u00e0 qu&#8217;intervient ContainerNursery , un petit utilitaire \u00e9crit en Node.js qui se comporte comme un reverse proxy intelligent qui va tout simplement stopper vos instances Docker quand aucune requ\u00eate HTTP ou connexion WebSocket n&#8217;est d\u00e9tect\u00e9e pendant un certain temps, et les red\u00e9marrer d&#8217;un coup de baguette magique d\u00e8s qu&#8217;une nouvelle requ\u00eate pointe le bout de son nez. Pour ceux qui se demandent s&#8217;il est possible de mettre en pause un conteneur proprement, sachez que ContainerNursery va plus loin que le simple docker pause. Il arr\u00eate carr\u00e9ment le conteneur pour lib\u00e9rer la RAM et \u00e9viter les r\u00e9veils CPU inutiles. Et il ne fait pas \u00e7a \u00e0 la sauvage puisqu&#8217;il v\u00e9rifie par exemple s&#8217;il n&#8217;y a pas de connexions WebSocket actives proxifi\u00e9es avant de tout couper. H\u00e9 oui, quand on n&#8217;est pas un connard, on \u00e9vite de d\u00e9connecter un utilisateur en plein milieu de sa session. Votre navigateur ne supporte pas la lecture de vid\u00e9os HTML5. Voici un lien vers la vid\u00e9o. D&#8217;ailleurs, pour ne pas faire fuir vos visiteurs pendant que le conteneur sort de sa sieste, l&#8217;outil affiche une page de chargement sympa qui se rafra\u00eechit toute seule d\u00e8s que votre serveur est pr\u00eat \u00e0 envoyer la sauce. C\u00f4t\u00e9 bidouille, on reste sur du classique. Tout se r\u00e8gle dans un fichier config.yml. En plus des domaines et des noms de conteneurs, vous devrez sp\u00e9cifier le proxyHost et le proxyPort pour que l&#8217;aiguillage se fasse correctement. Vous d\u00e9finissez ensuite le timeout au bout duquel tout le monde doit aller au dodo. Vous pouvez m\u00eame lui dire de ne pas couper si l&#8217;utilisation moyenne du CPU d\u00e9passe un certain seuil (exprim\u00e9 en pourcentage de 0 \u00e0 100 \u00d7 le nombre de c\u0153urs), histoire de ne pas flinguer un calcul lourd en cours. Pour le lancer, rien de plus simple : docker run &#8211;name=&#8217;ContainerNursery&#8217; -v \/var\/run\/docker.sock:\/var\/run\/docker.sock -v \/mnt\/ContainerNursery\/config:\/usr\/src\/app\/config ghcr.io\/itsecholot\/containernursery:latest Petit rappel de s\u00e9curit\u00e9 quand m\u00eame&#8230; Essayez de placer un autre reverse proxy (genre Nginx ou Traefik) devant ContainerNursery pour g\u00e9rer le HTTPS proprement, car ce dernier \u00e9coute en HTTP par d\u00e9faut. Quant au gain sur votre facture d&#8217;\u00e9lectricit\u00e9, il d\u00e9pendra \u00e9videmment de la charge r\u00e9elle \u00e9vit\u00e9e, mais sur une grosse machine avec des dizaines de services, \u00e7a finit par compter. Bref, c&#8217;est le genre de petit outil qui ne paie pas de mine mais qui permet de gagner pas mal de temps et surtout d&#8217;optimiser ses ressources sans se prendre la t\u00eate. On garde bien s\u00fbr la vieille carabine de p\u00e9p\u00e9 sous le lit pour les urgences, mais pour le reste, on laisse ContainerNursery g\u00e9rer la cr\u00e8che. Un grand merci \u00e0 Micka\u00ebl pour l&#8217;info !<\/p>\n","protected":false},"author":1,"featured_media":2014,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"give_campaign_id":0,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_kadence_starter_templates_imported_post":false,"footnotes":""},"class_list":["post-2013","page","type-page","status-publish","has-post-thumbnail","hentry"],"campaignId":"","_links":{"self":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2013","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/comments?post=2013"}],"version-history":[{"count":0,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/pages\/2013\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media\/2014"}],"wp:attachment":[{"href":"https:\/\/elearningsamba.com\/index.php\/wp-json\/wp\/v2\/media?parent=2013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}