docker上的Python可以打印到stdout



我正在运行一个docker容器,该容器通过服务器执行命令。然后将输出记录到文件中。我有另一个码头工人,每隔几分钟就跑一次,从docker log {name}上取下所有东西。我正在寻找一种读取执行日志文件并将其打印到STDOUT的方法,以便记录器服务选择数据。我试过这样的方法:subprocess.call("cat {latest_file}".format(latest_file=latest_file), shell=True),但它只在运行时将其打印到控制台。

我的问题是:我可以把我自己的文件/目录添加到docker记录器吗?

假设您事先知道日志文件的名称,您可以让应用程序继续按原样登录(即登录到一个文件(,并将该文件符号链接到/dev/stdout/dev/stderr

这是一个非常常见的解决方案,例如nginx进行

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log 
&& ln -sf /dev/stderr /var/log/nginx/error.log

编辑:请注意,只有当执行日志记录的应用程序以PID 0运行时,这才会起作用。如果您分叉了一个进程或类似的进程,则必须显式地写入PID 1的stdout/stderr文件描述符(在/proc/1/fd下可用

# forward request and error logs to docker log collector
RUN ln -sf /proc/1/fd/1 /var/log/nginx/access.log 
&& ln -sf /proc/1/fd/2 /var/log/nginx/error.log

(请参阅此答案了解更多详细信息(

最新更新