我在docker容器中有一个python应用程序,该应用程序记录到open("/proc/1/fd/1", "w")
的流中,因此可以通过docker logs
在容器外部看到日志。从非PID 1的进程打开该proc文件已在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
最终在容器外部可见?