Все пользуются Docker, но очень немногие знают, как дебажить контейнер Docker
Нет, я не про docker logs, или docker inspect, или docker exec.
Я про docker events.
Скорее всего, ты даже не знал, что он существует. Но он стримит низкоуровневые события в реальном времени прямо от Docker-демона; не только по твоему контейнеру.
Представь ситуацию:
Ваш контейнер в проде постоянно рестартится. А у вас локально всё ок.
И как настоящий герой, ты заходишь по SSH на сервер и начинаешь привычный дебаг-ритуал:
👉 docker logs → ничего
👉 docker inspect → статика
👉 docker exec → не успеваете подключиться, он умирает раньше
Знакомо, да?
Что дальше? Дай угадаю:
Ты начинаешь шаманить с Dockerfile и гонять его подряд через docker run. Просто потому, что никогда не слышал про docker events.
А теперь попробуй вот так:
docker events --filter container=<your_container_id>
Пример вывода:
2025-05-04T18:20:01Z container create ...
2025-05-04T18:20:02Z container start ...
2025-05-04T18:20:03Z container health_status: unhealthy ...
2025-05-04T18:20:04Z container kill signal=SIGTERM
2025-05-04T18:20:04Z container restart
И вуаля. Healthcheck завалился → контейнер прибили → Docker его автоматически перезапустил.
А в логах твоего приложения этого нет. Потому что healthcheck живёт вне основного процесса.
Бонус-фичи:
🔹Ограничить интервал по времени:
docker events --since 30m --until "2025-05-04T18:00:00"
🔹Хотите структурированный вывод?
docker events --format '{{json .}}'
🔹Нужен полный таймлайн по системе во время инцидента? Просто убери фильтр:
docker events
И прежде чем сказать:
«Ну вообще-то, в современной инфре надо использовать Grafana, Loki, Prometheus для наблюдаемости…»
Окей. Удачи дебажить:
🔹OOM-киллы до того, как метрики успели заскрейпиться
🔹Пропущенные монтирования томов
🔹Сломанные init-контейнеры
🔹Сайдкары, которые тихо падают и рестартуются
docker events всё это видит. В реальном времени.
Если вы дебажите Docker без этого, вы не дебажите - вы гадаете.