我可以看到所有来自my-container的主/初始进程(PID1)的STDOUT和STDERR都被发送到docker logs my-container,这对在这个进程中运行的任何应用程序都是有效的。例如,当我将docker attach发送到我的容器时,echo和其他命令的输出都被发送到日志,但是当我在主进程以外的进程中时,例如当我运行docker exec时,没有任何输出被发送到日志。有什么办法吗?
my-container
PID1
STDOUT
STDERR
docker logs my-container
docker attach
echo
docker exec
fykwrbwg1#
将输出重定向到/proc/1/fd/1以将其放入日志中。例如,使用
/proc/1/fd/1
docker run -d --name mycontainer debian tail -f /dev/null
然后将/etc/os-release的内容放入日志中
/etc/os-release
docker exec mycontainer sh -c 'cat /etc/os-release > /proc/1/fd/1'
请注意,您必须在单引号中重定向。如果不这样做,它将由主机上的shell处理。通过使用引号,它由容器内的shell处理,这就是你想要的。docker logs mycontainer现在将显示文件的内容。因此,基本上,您可以向/proc/1/fd/1写入任何内容,它都会显示在日志中。
docker logs mycontainer
1条答案
按热度按时间fykwrbwg1#
将输出重定向到
/proc/1/fd/1
以将其放入日志中。例如,使用
然后将
/etc/os-release
的内容放入日志中请注意,您必须在单引号中重定向。如果不这样做,它将由主机上的shell处理。通过使用引号,它由容器内的shell处理,这就是你想要的。
docker logs mycontainer
现在将显示文件的内容。因此,基本上,您可以向
/proc/1/fd/1
写入任何内容,它都会显示在日志中。