Docker-Images, die keinem Container zugeordnet sind, täglich automatisch entfernen
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
wget -qO- https://techoverflow.net/scripts/install-cleanup-docker-all.sh | sudo bashDies ist das Skript, das automatisch beide systemd-Konfigurationsdateien erstellt & installiert.
#!/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.timerUm die Logs anzuzeigen, verwenden Sie
journalctl -xfu PruneDockerAll.serviceUm den Status anzuzeigen, verwenden Sie
sudo systemctl status PruneDockerAll.timerUm Ihre Docker-Images sofort zu bereinigen, verwenden Sie
sudo systemctl start PruneDockerAll.service