TGViewer
Docker простыми словами Docker простыми словами @justdocker · 6.3K subscribers
Post #466 3.15K
🐳 Задача для продвинутых DevOps-инженеров: «Странный Docker контейнер, который тормозит хост»

🧠 Уровень: Senior DevOps / SRE
🎯 Цель: Найти причину деградации хост-системы при работе контейнера, не убивая продакшен

📍 Ситуация:

Ты запускаешь относительно простой контейнер:

docker run --rm myapp:latest



Через несколько минут:
- Уровень load average на хосте резко подскакивает
- CPU не перегружен, но система начинает "подвисать"
- Контейнер *не* использует много CPU или памяти (по `docker stats`)
- top и iotop на хосте — ничего подозрительного
- Но хост "лагает", SSH подключается с задержками, htop еле прокручивается

📦 Контейнер собран из Dockerfile:


FROM ubuntu:22.04
COPY . /app
WORKDIR /app
CMD ["python3", "main.py"]

  🧩 Ваша задача:

1. Объяснить, как контейнер может вызывать *нагрузку на хост*, не показывая это в docker stats
2. Найти потенциальную причину такой деградации
3. Предложить способ отладки, не убивая контейнер
4. Предложить защиту от подобных сценариев на уровне docker run и docker-compose
5. Написать Dockerfile и docker run с ограничениями, чтобы контейнер больше так не вел себя

💡 Подсказка:
Некоторые контейнеры могут порождать *огромное количество процессов* или использовать слишком много I/O операций с tmpfs или сокетами, перегружая не CPU, а системные лимиты ядра.

🛠 Решение:

1. Проверяем количество процессов:


ps -eLf | wc -l


2. Выясняем, что контейнер запускает тысячи потоков (например, while True: os.fork() или Thread() без лимита в main.py)

3. Используем strace`/`nsenter для анализа PID пространства:


docker inspect <container_id> | grep Pid
nsenter -t <pid> -a htop


4. Ставим лимиты:
- Через --pids-limit:


docker run --pids-limit 100 --memory=256m --cpus="0.5" myapp:latest

- Или в docker-compose.yml:


deploy:
resources:
limits:
cpus: "0.5"
memory: 256M


5. Добавляем в Dockerfile:


ENV PYTHONUNBUFFERED=1


📌 Вывод:
Контейнеры могут перегружать хост не по CPU/Memory, а по количеству потоков, сокетов, inode или I/O. Это не видно в docker stats, но критично для стабильности. Решение — выставлять ограничения (ulimit, pids, memory) и проверять, что внутри контейнера не бесконечный форк/спам.

💬 Отличный сценарий для продвинутого собеса на DevOps / Platform-инженера.
  • ❤ 13
More from @justdocker
  1. Sep 25, 2026🐳 Как устроен Docker: что происходит «под капотом» Поговорим немного про базу. Docker — о…
  2. Sep 25, 2026Kagent + Ollama: ИИ-агент для работы с Kubernetes Как использовать локальную языковую моде…
  3. Sep 22, 2026Из вашего резюме вообще понятно, что вы умеете как DevOps-инженер? Мы разбили работу DevOp…
  4. Sep 21, 2026🐳 Docker-образ с 3,17 ГБ до 354 МБ - почти в 9 раз меньше Такая оптимизация обычно достиг…
  5. Sep 15, 2026eBPF: рентгеновское зрение для production Сервис замедлился, соединения обрываются, а прив…
  6. Sep 10, 2026Чат с вашими резюме. Присылайте резюме, чтобы HR вас увидела и ей(ему) было удобно с вами…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →