no space left on device
failed to register layer: write /app/vendor/bundle/ruby/3.2.0/extensions/x86_64-linux/3.2.0/sassc-2.4.0/sassc/libsass.so: no space left on device
df -h
Rechercher la partition contenant /var/lib/docker
ou /
pour vérifier si elle est saturée.
docker container prune -f
docker image prune -a -f
docker volume prune -f
docker network prune -f
docker system prune -a --volumes -f
sudo systemctl stop docker
sudo mkdir /new-docker-storage
sudo rsync -a /var/lib/docker/ /new-docker-storage/
Créer ou éditer le fichier /etc/docker/daemon.json
:
{
"data-root": "/new-docker-storage"
}
sudo systemctl start docker
du -h / --max-depth=1 2>/dev/null | sort -hr | head -n 20
Inspecter les rĂ©pertoires volumineux pour libĂ©rer de lâespace.
Si lâerreur persiste malgrĂ© lâespace libĂ©rĂ© :
docker-compose down
docker-compose up --build
Docker peut Ă nouveau crĂ©er et exĂ©cuter des conteneurs sans rencontrer lâerreur no space left on device
.
Il est recommandé de mettre en place un cron ou un rappel pour faire réguliÚrement :
docker system prune -a --volumes
df -h
Par défaut, Docker enregistre les sorties des conteneurs (stdout
et stderr
) dans des fichiers .json.log
sans aucune rotation.
31G /var/lib/docker/containers/.../70eb658cb1b0...-json.log
truncate -s 0 /var/lib/docker/containers/<container-id>/<container-id>-json.log
Remplace <container-id>
par lâID rĂ©el du conteneur concernĂ©.
Modifie le fichier /etc/docker/daemon.json
:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
Cela limite chaque log Ă 10 Mo et conserve 3 fichiers maximum par conteneur (soit 30 Mo max).
âĄïž RedĂ©marrer Docker pour appliquer :
sudo systemctl restart docker
Puis redémarrer les conteneurs :
docker ps -q | xargs -n1 docker restart
Ajoute la ligne suivante dans le script docker_cleanup.sh
:
find /var/lib/docker/containers/ -name "*-json.log" -size +100M -exec truncate -s 0 {} \;
Cela purge tous les fichiers *-json.log
dépassant 100 Mo.
đ Cette ligne est dĂ©jĂ incluse dans le script gĂ©nĂ©rĂ© automatiquement.
#!/bin/bash
# Script de nettoyage Docker automatique
# Journalisation dans /var/log/docker_cleanup.log
LOGFILE="/var/log/docker_cleanup.log"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Démarrage du nettoyage Docker..." >> "$LOGFILE"
# Nettoyage des conteneurs arrĂȘtĂ©s
docker container prune -f >> "$LOGFILE" 2>&1
# Nettoyage des images non utilisées
docker image prune -a -f >> "$LOGFILE" 2>&1
# Nettoyage des volumes inutilisés
docker volume prune -f >> "$LOGFILE" 2>&1
# Nettoyage des réseaux non utilisés
docker network prune -f >> "$LOGFILE" 2>&1
# Nettoyage global complet
docker system prune -a --volumes -f >> "$LOGFILE" 2>&1
# Purge des fichiers de log JSON de conteneurs trop gros (>100Mo)
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Purge des fichiers de log JSON supérieurs à 100 Mo..." >> "$LOGFILE"
find /var/lib/docker/containers/ -name "*-json.log" -size +100M -exec truncate -s 0 {} \; >> "$LOGFILE" 2>&1
# Affichage de l'espace disque aprĂšs nettoyage
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Espace disque aprĂšs nettoyage :" >> "$LOGFILE"
df -h >> "$LOGFILE"
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Fin du nettoyage Docker." >> "$LOGFILE"
echo "--------------------------------------" >> "$LOGFILE"
sudo mv docker_cleanup.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/docker_cleanup.sh
sudo crontab -e
Ajoute :
0 2 * * 0 /usr/local/bin/docker_cleanup.sh