Есть следующая ситуация:
- Сервис spring-boot пишет логи через logback в файл output.log
- В logback настроена ротация логов и он периодически опустошает output.log, откидывая логи в архивные файлы, указанные в политике ротации. То есть сам output.log является таким временным буфером с самым свежим логом
- Все это замечательно работает:
https://www.youtube.com/watch?v=hrWmfC3y9zM
- Но если мы монтируем папку с логами из контейнера наружу (а нам надо это для чтения сторонней утилитой), то все ломается - output.log перестает автоматически очищаться, неограниченно растет, а архивные файлы, указанные в политике ротации не создаются вовсе. Это происходит даже когда файл из этой директории на хостовой машине никто не читает.
Условно вот так
1) Это внутри контейнера с сервисом
/app/
|-> service.jar
буферный лог пишется сюда:
/app/logs/
|-> output.log
файлы ротации откидываются сюда
/app/
|-> out1.log
|-> out2.log
монтируется наружу так:
volumes:
- /LOGS:/app/logs:rw
2. Второй контейнер, читающий логи смонтирован так:
volumes:
- /LOGS:/var/log
Но читающий контейнер ни при чем. Даже когда он остановлен, файл блокируется. То есть для блокировки достаточно просто примонтировать папку в первом контейнере-источнике с сервисом
Это какая-то особенность томов докера? И можно это как-то обойти?