Может ли приложение, запущенное в контейнере Docker, записывать данные в файловую систему своего контейнера?

#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 и не смог найти информацию по этому вопросу.