Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

„Brak miejsca na urządzeniu” - kiedy Docker zjadł cały dysk

Okładka posta: „Brak miejsca na urządzeniu” - kiedy Docker zjadł cały dysk
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.

22 lis 12:49

Co to jest VACUUM w PostgreSQL?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest B-Tree (drzewo zrównoważone)?
22 lis 12:58

Czym jest B-Tree (drzewo zrównoważone)?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)
30 gru 14:05

Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Problem Grzmiącego Stada: co to jest i dlaczego łamie produkcję
15 sty 10:14

Problem Grzmiącego Stada: co to jest i dlaczego łamie produkcję

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest Exponential Backoff i Random Jitter?
15 sty 15:24

Czym jest Exponential Backoff i Random Jitter?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Podłączenie usługi Elasticsearch do aplikacji Rails (Coolify w chmurze, serwer na Hetzner).
15 lut 13:45

Podłączenie usługi Elasticsearch do aplikacji Rails (Coolify w chmurze, serwer na Hetzner).

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
15 lut 20:03

Sidekiq 7.3.x i connection_pool 3.0 - niekompatybilność, która łamie pracowników

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska