Доступный для записи файловый дескриптор для вывода в Docker-контейнер
У меня есть приложение Python внутри Docker-контейнера, который входит в поток, который приходит из open("/proc/1/fd/1", "w")
поэтому журналы видны за пределами контейнера через docker logs
, Открытие этого файла proc из процесса, который не является PID 1, перестал работать в SLES 15, и я ищу обходной путь.
Вот минимальное воспроизведение проблемы с использованием стандартного bash
изображение докера.
С хост-операционной системой SUSE Linux Enterprise Server 12 (SLES 12) я могу сделать следующее:
# docker run -it bash:latest
bash-5.0# echo "HELLO" > /proc/1/fd/1
HELLO
bash-5.0# bash
bash-5.0# echo "WORLD" > /proc/1/fd/1
WORLD
Здесь даже в подоболочке, которая не является PID 1, я могу записать в стандартный вывод процесса 1, который позволяет выводить результаты в моем TTY, и, что более важно, отображаться в docker logs
,
Однако на хосте SLES 15:
# docker run -it bash:latest
bash-5.0# echo "HELLO" > /proc/1/fd/1
HELLO
bash-5.0# bash
bash-5.0# echo "WORLD" > /proc/1/fd/1
bash: /proc/1/fd/1: Permission denied
Это "Отказано в доступе" - та же ошибка, что и я в своем приложении на Python. Есть ли способ сделать этот "файл" / proc доступным для записи другими процессами? Или есть более переносимый способ прямого вывода, чтобы он был виден снаружи контейнера через docker logs
?