【问题标题】:Python on docker to print out to stdoutdocker上的Python打印到标准输出
【发布时间】:2020-04-11 03:38:31
【问题描述】:

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

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

【问题讨论】:

    标签: python docker logging


    【解决方案1】:

    假设您事先知道日志文件的名称,您可以让应用程序继续按原样记录(即到文件)并将该文件符号链接到 /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
    

    (详情请见this answer

    【讨论】:

    • echo 1 > /proc/1/fd/1 成就了我的一天!
    最近更新 更多