removespread / Docker
DOCKER · МОДУЛЬ 04 · УРОК 1

Контейнер не отвечает: где искать причину

18 мин

Три источника фактов: состояние контейнера, журнал приложения и команда внутри него.

Диагностика и здоровье~18 мин
После урока вы сможете
  • Выбирать между logs, inspect и exec
  • Составлять воспроизводимый отчёт о сбое
  • Объяснять различие stop и kill

Сначала состояние, затем журнал

На тестовом стенде запрос зависает. Не начинайте с пересборки: она изменит исходные условия. Сначала запишите адрес запроса, время, ожидаемый результат и имя контейнера. В примерах он называется qa-api; команды выполняются в вашем терминале с Docker, а не в редакторе Python.

docker ps -a помогает заметить завершившийся контейнер. Затем прочитайте последние сообщения приложения. Параметры --tail и --since ограничивают объём; --timestamps позволяет сопоставить ошибку со временем запроса. Python traceback полезнее догадки «Docker сломался».

docker ps -a
docker logs --tail 50 --timestamps qa-api
docker logs --since 5m qa-api

Если журнал пуст, это ещё не доказательство отсутствия ошибки: программа могла не писать в стандартные потоки. Для своих диагностических сообщений используйте print(..., flush=True) или запуск python -u app.py. Docker не превращает произвольные файлы журналов в вывод docker logs.

Подробнее: docker logs в документации Docker.

Шаг 1 из 5