Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Wdrażasz aplikację na Coolify, budowanie przebiega pomyślnie… a nagle na etapie eksportu obrazu:
ERROR: failed to extract layer sha256:... write /var/lib/containerd/.../File/dirname-c.ri: no space left on device
Budowa zakończyła się, ale obraz nie ma gdzie zapisać - dysk jest pełny.
🤔 Dlaczego tak się dzieje
Docker gromadzi śmieci z każdym wdrożeniem:
- Stare obrazy - każde budowanie tworzy nowy obraz, stare pozostają
- Build cache - pośrednie warstwy budowy nigdy nie są automatycznie usuwane
- Zatrzymane kontenery - nieusunięte kontenery z poprzednich wdrożeń
- Nie używane volumes - pozostałości po usuniętych usługach
Na małym serwerze (4–8 GB dysku) może to zapełnić dysk w ciągu kilku tygodni aktywnego rozwoju.
Szczególnie jeśli używasz Rails + Sidekiq + Redis + Elasticsearch.
🔎 Diagnostyka
Sprawdź stan dysku:
df -h
Sprawdź, ile zajmuje Docker:
docker system df
Zazwyczaj zobaczysz dziesiątki gigabajtów w sekcji Images lub Build Cache.
🛠 Naprawa
docker system prune -a --volumes
To polecenie usuwa:
- Wszystkie zatrzymane kontenery
- Wszystkie sieci, które nie są używane
- Wszystkie obrazy bez aktywnych kontenerów
- Cały build cache
- Wszystkie volumes bez aktywnych kontenerów (--volumes)
⚠️ Uwaga
--volumes usunie również dane w volumes.
Jeśli twoja baza (PostgreSQL / MySQL) działa przez Docker volume bez zewnętrznego backupu - najpierw zrób zrzut.
🧼 Profilaktyka
Aby nie wpadać w tę sytuację regularnie:
Dodaj cron do automatycznego czyszczenia
Co tydzień o 3:00 w nocy (bez volumes, aby nie uszkodzić bazy danych):
0 3 * * 0 docker system prune -af
Zwiększ dysk
Jeśli uruchamiasz:
- Rails
- Elasticsearch
- Redis
- Sidekiq
4 GB dysku - to za mało.Komfortowe minimum: 20-40 GB.
Ogranicz build cache
docker builder prune --keep-storage 2GB
To pozwala zachować cache, ale nie pozwoli mu się rozrosnąć bez kontroli.
Jeśli wdrożenie kończy się błędem no space left on device - to nie jest błąd aplikacji.Po prostu Docker zgromadził zbyt wiele starych danych.
Jedno polecenie:
docker system prune -a --volumes
rozwiązuje problem w kilka sekund.
Jednak lepiej skonfigurować automatyczne czyszczenie, aby nie pamiętać o tym podczas kolejnego wydania.
Ten post nie ma jeszcze żadnych dodatków od autora.