Скиллы Новичок Разное

Container Debug

Скачать ZIP
13
Предупреждение о рисках!

Установка скиллов и плагинов 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-среде. :


Файл из источника

10868_container-debug-1.0.0.zip