У меня есть приложение python внутри контейнера докера, которое регистрирует поток, поступающий из 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
?