Доступный для записи файловый дескриптор для вывода в Docker-контейнер - PullRequest
0 голосов
/ 21 июня 2019

У меня есть приложение 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?

...