Контейнер не отвечает: где искать причину
Три источника фактов: состояние контейнера, журнал приложения и команда внутри него.
После урока вы сможете
- Выбирать между 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.