Docker容器输出的可写文件描述符

时间:2019-06-21 16:16:13

标签: docker file-descriptor suse sles proc-filesystem

我在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最终在容器外部可见?

0 个答案:

没有答案