ЗмістНатисність на посилання, щоб перейти до потрібного місця
Деплоїш додаток на Coolify, білд проходить успішно… і раптом на етапі експорту образу:
ERROR: failed to extract layer sha256:... write /var/lib/containerd/.../File/dirname-c.ri: no space left on device
Білд зібрався, але образ нікуди записати - диск заповнений.
🤔 Чому так стається
Docker накопичує сміття з кожним деплоєм:
- Старі образи - кожен білд створює новий образ, старі залишаються
- Build cache - проміжні шари збірки ніколи не видаляються автоматично
- Зупинені контейнери - невидалені контейнери від попередніх деплоїв
- Невикористані volumes - залишки від видалених сервісів
На невеликому сервері (4–8 GB диску) це може забити диск за кілька тижнів активної розробки.
Особливо якщо ви тримаєте Rails + Sidekiq + Redis + Elasticsearch.
🔎 Діагностика
Перевірити стан диску:
df -h
Подивитись, скільки займає Docker:
docker system df
Зазвичай ви побачите десятки гігабайт у розділі Images або Build Cache.
🛠 Фікс
docker system prune -a --volumes
Ця команда видаляє:
- Всі зупинені контейнери
- Всі мережі, які не використовуються
- Всі образи без активних контейнерів
- Весь build cache
- Всі volumes без активних контейнерів (--volumes)
⚠️ Увага
--volumes видалить і дані у volumes.
Якщо ваша база (PostgreSQL / MySQL) працює через Docker volume без зовнішнього бекапу - спершу зробіть дамп.
🧼 Профілактика
Щоб не потрапляти в цю ситуацію регулярно:
Додати cron для автоматичного очищення
Щотижня о 3:00 ночі (без volumes, щоб не зачепити БД):
0 3 * * 0 docker system prune -af
Збільшити диск
Якщо ви запускаєте:
- Rails
- Elasticsearch
- Redis
- Sidekiq
4 GB диску - замало.Комфортний мінімум: 20-40 GB.
Обмежити build cache
docker builder prune --keep-storage 2GB
Це дозволяє зберігати кеш, але не дасть йому розростися безконтрольно.
Якщо деплой падає з no space left on device - це не баг додатку.Просто Docker накопичив занадто багато старих даних.
Одна команда:
docker system prune -a --volumes
вирішує проблему за секунди.
Але краще налаштувати автоматичне очищення, щоб не згадувати про це під час чергового релізу
Цей допис поки що не має жодних доповнень від автора/ки.