Установка скиллов и плагинов OpenClaw осуществляется на ваш страх и риск. Все файлы были получены из открытых источников и предоставляются «как есть». Мы не гарантируем их корректную работу, безопасность или совместимость с вашей системой. Перед установкой настоятельно рекомендуется ознакомиться с содержимым кода и убедиться, что вы понимаете, какие изменения будут внесены в вашу систему.
Отладка контейнеров — это практическое руководство по диагностике и устранению проблем в Docker-контейнерах и сервисах Docker Compose. Оно охватывает работу с логами, выполнение команд внутри контейнера, сетевую диагностику, анализ ресурсов, а также распространённые сценарии сбоев.
Когда использовать
- Контейнер сразу завершается или падает при запуске
- Приложение внутри контейнера ведёт себя иначе, чем на хосте
- Контейнеры не могут взаимодействовать друг с другом
- Контейнер потребляет слишком много CPU или памяти
- Сборка Docker (особенно multi-stage) даёт неожиданный результат
- Проверки здоровья (health checks) не проходят
- Сервисы Compose запускаются в неправильном порядке или не соединяются
Логи контейнера
Первое, с чего стоит начать — это анализ логов. Они позволяют быстро понять причину сбоя или неправильного поведения приложения.
# Последние 100 строк
docker logs --tail 100 my-container
# Поток логов в реальном времени
docker logs -f my-container
# С временными метками
docker logs -f -t my-container
# Логи за период
docker logs --since 30m my-container
docker logs --since "2026-02-03T10:00:00" my-container
# Через Docker Compose
docker compose logs -f
docker compose logs -f api db
Для более глубокого анализа можно перенаправить вывод в файл или разделить stdout и stderr.
docker logs my-container > container.log 2>&1
docker logs my-container > stdout.log 2> stderr.log
Вход в контейнер
Если логов недостаточно, следующий шаг — зайти внутрь контейнера и проверить окружение вручную.
# Bash (если доступен)
docker exec -it my-container bash
# Для минимальных образов
docker exec -it my-container sh
# Выполнение команды без интерактивного режима
docker exec my-container ls -la /app/
docker exec my-container env
Можно также запускать команды от root или с заданными переменными окружения.
docker exec -u root -it my-container bash
docker exec -e DEBUG=1 -it my-container bash
Диагностика упавшего контейнера
Если контейнер завершился, важно проверить код выхода и причину ошибки.
docker inspect --format='{{.State.ExitCode}}' my-container
docker inspect --format='{{.State.Error}}' my-container
Типичные коды выхода:
- 0 — корректное завершение
- 1 — ошибка приложения
- 137 — завершён из-за нехватки памяти (OOM)
- 139 — segmentation fault
- 143 — завершён сигналом SIGTERM
Для отладки можно перезапустить контейнер или изменить entrypoint.
docker start -ai my-container
docker run -it --entrypoint sh my-image
Работа с файлами
Иногда важно извлечь конфигурации или логи из контейнера.
docker cp my-container:/app/error.log ./error.log
docker cp my-container:/etc/nginx/nginx.conf ./nginx.conf
Отладка без shell
В минимальных образах (distroless, scratch) может не быть shell. В этом случае используются обходные методы.
# Получение PID контейнера
PID=$(docker inspect --format='{{.State.Pid}}' my-container)
# Подключение через nsenter (Linux)
nsenter -t $PID -m -u -i -n -p -- /bin/sh
# Запуск debug-контейнера в том же namespace
docker run -it --pid=container:my-container --net=container:my-container busybox sh
Сетевые проблемы
Сетевые ошибки — одна из самых частых причин проблем. Проверяйте IP, DNS и доступность сервисов.
# IP контейнера
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-container
# Проверка подключения
docker exec container-a ping container-b
docker exec container-a curl http://container-b:8080/health
# DNS внутри контейнера
docker exec my-container nslookup db
docker exec my-container cat /etc/resolv.conf
docker exec my-container cat /etc/hosts
Если в контейнере нет нужных утилит, используйте отдельный debug-контейнер.
docker run --rm --network container:my-container curlimages/curl curl -s http://localhost:8080
Анализ ресурсов
Контейнер может падать из-за нехватки ресурсов или неправильных лимитов.
docker stats my-container
docker inspect my-container | grep -E "Memory|Cpu"
Итог
Отладка контейнеров — это последовательный процесс: от анализа логов к проверке окружения, сети и ресурсов. Комбинируя эти подходы, можно быстро локализовать и устранить большинство проблем в Docker-среде. :
Файл из источника