繁体   English   中英

docker 上的 Python 打印到标准输出

[英]Python on docker to print out to stdout

我正在运行一个使用服务器执行命令的 docker 容器。 然后它将 output 记录到文件中。 我有另一个 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

(有关详细信息,请参阅此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM