Docker-Images, die keinem Container zugeordnet sind, täglich automatisch entfernen

English Deutsch

Hinweis: Dies entfernt nicht nur Docker-Images ohne Tag, sondern alle Docker-Images, die keinem laufenden oder gestoppten Container zugeordnet sind. Siehe unseren vorherigen Beitrag Docker-Images täglich automatisch bereinigen (prune) falls dies nicht das gewünschte Verhalten ist. docker image prune bietet eine einfache Möglichkeit, „ungenutzte" Docker-Images von einem System zu entfernen und behebt oder verzögert erheblich, dass Docker z.B. auf automatisierten Systemen den gesamten Speicherplatz verbraucht.

Ich habe eine auf systemd-Timer basierende tägliche Image-Entfernungs-Routine mit TechOverflows Simple systemd timer generator erstellt.

Schnellinstallation mit

install-cleanup-docker-all.sh
wget -qO- https://techoverflow.net/scripts/install-cleanup-docker-all.sh | sudo bash

Dies ist das Skript, das automatisch beide systemd-Konfigurationsdateien erstellt & installiert.

install-prune-docker-all.sh
#!/bin/sh
# Dieses Skript installiert automatisierte Docker-Bereinigung
# auf systemd-basierten Systemen.
# Siehe https://techoverflow.net/2020/02/04/how-to-remove-all-docker-images-that-are-not-associated-to-a-container/
# für Details dazu, welche Images entfernt werden.
# Es erfordert, dass Docker ordnungsgemäß installiert ist

cat >/etc/systemd/system/PruneDockerAll.service <<EOF
[Unit]
Description=PruneDockerAll

[Service]
Type=oneshot
ExecStart=/bin/bash -c "docker image ls --format '{{.ID}}' | xargs docker image rm ; true"
WorkingDirectory=/tmp
EOF

cat >/etc/systemd/system/PruneDockerAll.timer <<EOF
[Unit]
Description=PruneDockerAll

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target
EOF

# Dienst aktivieren und starten
systemctl enable PruneDockerAll.timer && sudo systemctl start PruneDockerAll.timer

Um die Logs anzuzeigen, verwenden Sie

prune-docker-logs.sh
journalctl -xfu PruneDockerAll.service

Um den Status anzuzeigen, verwenden Sie

prune-docker-status.sh
sudo systemctl status PruneDockerAll.timer

Um Ihre Docker-Images sofort zu bereinigen, verwenden Sie

prune-docker-now.sh
sudo systemctl start PruneDockerAll.service

Check out similar posts by category: Docker