
Ваш docker‑compose.yml сломается: 5 настроек, которые все забывают
badcasedaily1 1 час назад Ваш docker‑compose.yml сломается: 5 настроек, которые все забывают Простой 6 мин 1.7K Блог компании OTUS Программирование * DevOps * Linux * Туториал Вы написали docker‑compose.yml, подняли...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. badcasedaily1 1 час назад Ваш docker‑compose. yml сломается: 5 настроек, которые все забывают Простой 6 мин 1. 7K Блог компании OTUS Программирование * DevOps * Linux * Туториал Вы написали docker‑compose.
yml, подняли сервис локально, всё крутится. Задеплоили на сервер, запустили docker compose up -d, неделю всё нормально. А потом контейнер с Postgres тихо съедает всю память на хосте и OOM‑киллер убивает соседний сервис.
Технические детали
Или приложение падает в два часа ночи, а Docker не перезапускает его, потому что restart policy стоит в дефолтном no. Или логи за месяц занимают 40 ГБ, и на диске кончается место. Все пять проблем решаются парой строк в compose‑файле.
Но про них забывают, потому что локально они не проявляются: на вашей машине 32 ГБ RAM, места на диске полтерабайта, и сервис перезапускать не нужно, потому что вы рядом. Нет лимитов на память и CPUПо умолчанию контейнер может использовать всю память и все ядра хоста. На сервере с тремя контейнерами (приложение, Postgres, Redis) любой из них может захватить все ресурсы.
Обычно это Postgres: ему сказали «бери сколько нужно», он и берёт. Когда RAM заканчивается, Linux OOM‑киллер убивает процесс с наибольшим потреблением, и часто это не Postgres (у него есть shared buffers), а ваше приложение, которое в этот момент обрабатывает 500 запросов и держит их в памяти. services: app: image: myapp:latest deploy: resources: limits: memory: 512M cpus: "1.
Отраслевые последствия
0" reservations: memory: 256M postgres: image: postgres:16-alpine deploy: resources: limits: memory: 1Glimits — потолок. reservations — гарантированный минимум. Если контейнер превысит лимит памяти, Docker убьёт его сам, без OOM‑киллера (точнее, cgroup OOM, что по сути то же самое, но изолированно).
Как узнать, что контейнер умер от OOM:docker inspect myapp --format='{{. OOMKilled}}'Если true — контейнер был убит за превышение лимита. Увеличьте лимит или оптимизируйте потребление.
Для Postgres внутри контейнера shared_buffers нужно выставлять с учётом лимита: обычно 25% от доступной памяти. При лимите 1G это 256M. Если оставить дефолтные 128MB shared_buffers при лимите 1G, Postgres будет использовать RAM через файловый кеш ОС, что тоже нормально, но менее предсказуемо.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.




