#docker #logging
Вопрос:
У меня есть сервер Python Tornado, который я в последнее время пытаюсь докеризировать. Единственная проблема, которую я не смог решить, — это ведение журнала. Ранее сервер записывал журналы в файлы в своем каталоге, используя logging
модуль. Однако при запуске в качестве контейнера журналы больше не записываются вообще, даже внутри файловой системы контейнера. Я попытался создать новые файлы, и это тоже не работает. Вывод, по-видимому, состоит в том, что приложение не может изменять файловую систему своего контейнера, но для меня это не имеет смысла.
Я также читал о томах и привязке каталогов контейнеров к каталогам хостов. Я тоже пробовал это, но по-прежнему файлы не создавались и не записывались.
Я знаю, что, вероятно, мог бы решить проблему ведения журнала, перенаправив журналы сервера в stdout
amp; stderr
и используя ведение журнала docker, но я хочу понять, почему файловая система контейнера кажется неизменной.
Ответ №1:
Файловая система контейнера не является неизменяемой, но файлы журналов туда не записываются. Их не должно быть; если бы они были, вы бы потеряли журналы, когда контейнер остановился.
Вы уже используете ведение журнала docker: «По умолчанию Docker фиксирует стандартный вывод (и стандартную ошибку) всех ваших контейнеров и записывает их в файлы в формате JSON» с json-file
драйвером для ведения журнала по умолчанию.
Смотрите документы Docker по настройке ведения журнала: https://docs.docker.com/config/containers/logging/configure/
Файлы журнала создаются на хосте:
/var/lib/docker/containers/<container_id>/<container_id>-json.log
Вы отслеживаете журналы с хоста через
docker logs -f <container_id>
Комментарии:
1. Спасибо вам за разъяснение. Как видно из вопроса, я уже знал, что Docker записал stdout и stderr в журналах на хосте, я просто хотел знать, почему я не мог писать в файлы в контейнере. Я раньше не использовал Docker и не смог найти информацию по этому вопросу.