Manque d'espace : l'image Docker est volumineuse ?

Bonjour, j’administre un petit forum auto-hébergé sur une VM cloud de 25 Go sous Debian 13. J’ai tenté de mettre à jour vers la version 2026.6.0-latest en exécutant ./launcher rebuild app, mais la mise à jour a été annulée car je n’avais pas assez d’espace disque. J’ai suivi l’invite pour nettoyer les images Docker, mais cela n’a pas suffi. Il me reste 3,9 Go. Les fichiers uploadés de mon forum représentent 138 Mo, et mes sauvegardes totalisent 448 Mo. Mon serveur est vierge à part l’installation de Discourse ; je n’ai rien fait d’autre dessus.

Après avoir exploré avec du, j’ai constaté que /var/lib/containerd occupe 13 Go et /var/docker 5,1 Go. Est-il normal que ces répertoires consomment autant d’espace ? Y a-t-il quelque chose que je puisse faire à ce sujet ?

Si c’est normal, je suppose que je devrai simplement payer pour plus de stockage. Je voulais juste confirmer avant d’engager cette dépense supplémentaire. Merci !

Hmm… avez-vous essayé ./launcher cleanup ?

Il vaut la peine de lancer un nettoyage. Veuillez publier les détails de ce qui s’est passé. En voici un que j’ai effectué moi-même :

root@ubuntu-2gb-nbg1-1:/var/discourse# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        19G   12G  6.5G  65% /

root@ubuntu-2gb-nbg1-1:/var/discourse# ./launcher cleanup
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B

WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y

Deleted Images:
deleted: sha256:33ce56b3484175342191a344fe1aa9f330431de7bf6f0f0e14f75c5bd851a5b0
deleted: sha256:5e04a0411f813e8f2c1a50d84a7d7bb1b17a855ce041730cf8e3b2fb90144b19
untagged: discourse/base:2.0.20200512-1735
untagged: discourse/base@sha256:7f6c5be23a8e4237cecafaca9d041de5964f8237345b7b183cebdee1f73ed024
deleted: sha256:991acdba0b1f18141192f8682bc5ec1c3365dff0d4fa1c6504e6ce0e3ae6dd76
deleted: sha256:e1c41c8dbd697ae0a61ca612c61f085f69f5bf74c4269cf5c68b4de0fec723fa
deleted: sha256:c2adabaecedbda0af72b153c6499a0555f3a769d52370469d8f6bd6328af9b13
untagged: discourse/base:2.0.20200724-1815
untagged: discourse/base@sha256:1d5eb2f8eae84203b28d3c643648d0dd7d213c2055865cfa5132e30db9e365d5

Total reclaimed space: 2.591GB

# df -h /
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1        19G  8.7G  9.3G  49% /

Il est également utile d’examiner en détail l’utilisation du disque et de la publier ici ! Par exemple,

Si vous avez des sauvegardes sur le système, vous devriez les télécharger, les tester et supprimer toutes sauf la plus récente. En cas de pression extrême, supprimez également la plus récente. (Dans mon cas, je m’assure que la copie que j’ai téléchargée est également couverte par ma propre sauvegarde personnelle hors site au préalable. Ayez toujours au moins deux copies.)

Outre du, qui répond aux questions au niveau du système d’exploitation, vous pouvez poser des questions au niveau de Docker. Veuillez publier vos résultats détaillés !

# docker volume ls -qf dangling=true
# docker images -a

Il est difficile de gérer l’utilisation du disque sur une instance de 25 Go – je l’ai fait pendant longtemps, en utilisant du temps et en mettant à profit mon expérience en administration système. Finalement, j’ai changé de fournisseur, payé moins cher et obtenu 40 Go, ce qui était beaucoup mieux.

Voir également précédemment
Discourse upgrade fails due to insufficient disk space on 25G droplet

C’est très informatif, merci.

Avant d’essayer cleanup, Discourse propose-t-il un moyen de vérifier l’intégrité des sauvegardes sans procéder à une restauration ?

Le résultat de du -hx / | sort -h | tail -49 (j’ai trouvé que l’option -h facilitait l’analyse des résultats) :

833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby/3.4.0
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse/vendor
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse/vendor/bundle
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse/vendor/bundle/ruby
837M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs/var/www/discourse/vendor/bundle/ruby/3.4.0
839M	/var/discourse/shared
839M	/var/discourse/shared/standalone
840M	/var/discourse
863M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42
863M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs
868M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283
868M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/283/fs
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/284
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/284/fs
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs
908M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/263/fs/usr
925M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs/usr
944M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/263
944M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/263/fs
961M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22
961M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs
1.3G	/usr
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var/www
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var/www/discourse
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse
1.6G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227
1.6G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs
2.5G	/var/log
2.5G	/var/log/journal
2.5G	/var/log/journal/1d9299c9656046d6bd0e18d4a09c183c
2.7G	/var/lib/containerd/io.containerd.content.v1.content
2.7G	/var/lib/containerd/io.containerd.content.v1.content/blobs
2.7G	/var/lib/containerd/io.containerd.content.v1.content/blobs/sha256
9.8G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
9.8G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots
13G	/var/lib
13G	/var/lib/containerd
17G	/var
20G	/

La sortie de docker volume ls -qf dangling=true était vide. En fait, docker volume ls l’est aussi.

docker images -a :

IMAGE                              ID             DISK USAGE   CONTENT SIZE   EXTRA
discourse/base:2.0.20260209-1300   50d2dae489a9       4.77GB         1.12GB        
discourse/base:2.0.20260521-0047   27373b823bbe       4.89GB         1.17GB        
local_discourse/app:latest         01527763be8d        6.9GB         1.63GB    U   

Je connais trop peu Docker pour diagnostiquer cette sortie, mais /var/log/ semble un peu volumineux s’il ne s’agit que de journaux, et il est intéressant d’avoir 3 images alors que je n’ai qu’un seul forum en cours d’exécution (ceci est peut-être tout à fait normal, cependant).

Je vous remercie pour la remarque concernant davantage d’espace de stockage. Je vais probablement en ajouter, mais c’est une bonne expérience d’apprentissage avant de le faire.

Vous pouvez économiser un peu en reconfigurant la journalisation :

Je n’ai jamais vraiment compris la gestion des conteneurs Docker. Parfois, le nettoyage aide. J’ai exécuté ces commandes à l’instant :

# cd /var/discourse/
# df -h /
Système de fichiers      Taille  Utilisé  Disponible  %Utilisé  Monté sur
/dev/sda1                38G     24G      13G         67%       /
# docker images -a
                                                                                             i Info →   U  En cours d'utilisation
IMAGE                              ID             USAGE DISQUE   TAILLE DU CONTENU   EXTRAS
discourse/base:2.0.20260209-1300   18ccefc73392        3,1Go             0B        
local_discourse/app:latest         810ac5579584       4,57Go             0B    U   
<sans étiquette>                         d303cfc49c99       4,37Go             0B        
<sans étiquette>                         a9d03385c205       4,34Go             0B        
# ./launcher cleanup
ATTENTION ! Cela supprimera tous les conteneurs arrêtés.
Êtes-vous sûr de vouloir continuer ? [y/N] y
Espace récupéré au total : 0B
ATTENTION ! Cela supprimera toutes les images sans au moins un conteneur associé.
Êtes-vous sûr de vouloir continuer ? [y/N] y
Images supprimées :
supprimé : sha256:d303cfc49c992b7fa0b0da65e38f3de79312c6e42eb99e5fd7b27bf4e237ab1d
supprimé : sha256:829057c668fd2bd0f7b863c2589e5c3c27364285b39d6df31d38eb208e6410df
sans étiquette : discourse/base:2.0.20260209-1300
sans étiquette : discourse/base@sha256:50d2dae489a9c9916c3d50d880f7f1282fcbe179339b60a8947ab135c1f1f9bf
supprimé : sha256:a9d03385c205f740e5f02db0c665a83688f7194d5386bd2d01772b8b5cd5dc65
supprimé : sha256:70ec1b4b6cab7365b5f56b8187ef7631e6906fe13b5d3a2b1e39d3457d14514c

Espace récupéré au total : 2,517 Go
# docker images -a
                                                                                             i Info →   U  En cours d'utilisation
IMAGE                        ID             USAGE DISQUE   TAILLE DU CONTENU   EXTRAS
local_discourse/app:latest   810ac5579584       4,57Go             0B    U   
<sans étiquette>                   18ccefc73392        3,1Go             0B        
# df -h /
Système de fichiers      Taille  Utilisé  Disponible  %Utilisé  Monté sur
/dev/sda1                38G     21G      15G         59%       /

Voici la sortie de ./launcher cleanup :

WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 0B
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: discourse/base:2.0.20260209-1300
deleted: sha256:50d2dae489a9c9916c3d50d880f7f1282fcbe179339b60a8947ab135c1f1f9bf
deleted: sha256:1bb6f08ca8363e7e002eaf8bafc76b7742d8baa429f816cde77d3d38d234c98a
deleted: sha256:07596c600885cf3f0647c4b41959c5631328ee37af14913b9f2b1b1771ad4f45
untagged: discourse/base:2.0.20260521-0047
deleted: sha256:27373b823bbeca526dd006cefe1c58e7eeca1e5670ab6e619fcd2138f7d50420
deleted: sha256:ab90467600edc09bae8ac2f43420b7c771f87d357aa15646cd40025ec0774fda
deleted: sha256:053438a5cf1727f724f96a4d7af0b135929f633afd8ee05edcddeaf99232b636

Total reclaimed space: 1.17GB

Cependant, cela est étrange : mon forum Discourse est passé de 3,9 Go d’espace libre à 8,5 Go d’espace libre. Si je relance du -hx / | sort -h | tail -49, vous pouvez comparer avec mes résultats précédents, et /var/lib a rétréci de 8 Go :

628M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse/vendor/bundle/ruby
628M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse/vendor/bundle/ruby/3.4.0
629M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse/vendor
733M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby/3.4.0/gems
792M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var/www/discourse/node_modules/.pnpm
793M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var/www/discourse/node_modules
794M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var
794M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var/www
794M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs/var/www/discourse
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby
833M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs/var/www/discourse/vendor/bundle/ruby/3.4.0
839M	/var/discourse/shared
839M	/var/discourse/shared/standalone
841M	/var/discourse
863M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42
863M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/42/fs
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43
874M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/43/fs
925M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs/usr
961M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22
961M	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/22/fs
1.3G	/usr
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var/www
1.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/251/fs/var/www/discourse
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www
1.5G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs/var/www/discourse
1.6G	/var/lib/containerd/io.containerd.content.v1.content
1.6G	/var/lib/containerd/io.containerd.content.v1.content/blobs
1.6G	/var/lib/containerd/io.containerd.content.v1.content/blobs/sha256
1.6G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227
1.6G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots/227/fs
2.5G	/var/log
2.5G	/var/log/journal
2.5G	/var/log/journal/1d9299c9656046d6bd0e18d4a09c183c
6.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs
6.4G	/var/lib/containerd/io.containerd.snapshotter.v1.overlayfs/snapshots
7.9G	/var/lib/containerd
8.0G	/var/lib
12G	/var
15G	/

Et docker images -a est nettement différent :

IMAGE                        ID             DISK USAGE   CONTENT SIZE   EXTRA
local_discourse/app:latest   01527763be8d        6.9GB         1.63GB    U   

Il semble que ./launcher cleanup sous-estime la quantité d’espace récupéré ?

Je devrais maintenant avoir suffisamment d’espace pour effectuer une mise à jour. Il semble que lancer cleanup après une mise à jour soit une bonne habitude à prendre.

Merci pour votre aide !

Vous venez de nettoyer deux images de base, laissant l’image locale construite.

Les images de base ne sont-elles que des vestiges du processus d’installation initial ? Ou sont-elles également téléchargées lors d’une commande rebuild app ?

Oui. La dernière image est téléchargée si elle est manquante, et vous construirez votre image locale à partir de celle-ci.

Je ne vois pas de raison pour laquelle vous voudriez conserver plus d’une image de base …