#1 楼
nginx Dockerfile中给出了一个惊人的配方: &stdout
!评论
这个。是的。只是。辉煌。而且用途广泛。
–spacediver
2014年11月15日23:24
与此有关的一件事是,当您正在运行的事物坚持以非根进程的形式将自身派生到后台时。我在squid3中遇到了这个问题,然后在/ dev / stdout的权限上遇到了麻烦。
–mikepurvis
2014年12月17日下午3:51
这并不总是有效-例如,如果应用程序尝试查找文件,则此方法通常将不起作用。
– mixja
16年5月24日在11:45
一切都是胜利的档案。
–RubberDuck
17年7月15日在20:12
请注意,这在大多数情况下都有效,但是,如果您执行日志记录的应用程序未以PID 1的身份运行,则日志将不会重定向到Docker读取的标准输出。
–leeman24
19-10-31在15:34
#2 楼
对于Docker容器中的后台进程,例如将exec与exec连接到我能够使用的/ bin / bash。评论
这是正确的答案。日志应发送到PID1的stdout,如果您的应用程序在其他PID下运行,则docker日志或kubectl日志将看不到该日志。我有一个通过crontab计划任务的容器,该容器未作为PID1运行。
–leeman24
19-10-31在15:33
#3 楼
在另一个问题中,当父进程退出时杀死子进程,我得到了有助于解决该问题的响应。通过这种方式,我们配置了应用程序,使其记录到文件中,并连续地对其进行查询。幸运的是,
tail -f
可以接受tail
:当指定的进程退出时它将退出。我们将--pid PID
放在这里:当前shell的PID。最后一步,启动的应用程序是
$$
'ed,这意味着当前shell被该应用程序完全替换。< br Runner脚本
exec
看起来像这样: 最后,使用简约的Dockerfile:替换为远程文件。放弃该名称”)我尝试了另一种方法:所有已知的日志文件在启动时都会创建并被截断:这样我可以确保它们存在,然后-尾随它们: br />
#! /usr/bin/env bash
set -eu
rm -rf /var/log/my-application.log
tail --pid $$ -F /var/log/my-application.log &
exec /path/to/my-application --logfile /var/log/my-application.log
评论
特别是对于Apache服务器,我正在使用管道日志(httpd.apache.org/docs/2.4/logs.html#piped),看起来像是可以正常工作。
– PHP编码器
2015年10月9日,9:49
该解决方案可以解决与alpine类似的问题,并且在不使用--pid选项的情况下,在BusyBox尾部上也可以正常工作。
–瑞安
18/12/10在2:12
解决方法对我有用。非常有用,谢谢。
– Tamas Kalman
19 Mar 18 '19在23:49
尽管这在Docker上非常有效,但不适用于Kubernetes!我不知道为什么,但是豆荚的容器缺少尾巴处理...
–ZedTuX
20 Dec 10'在8:56
#4 楼
对于Nginx,您可以像这样将nginx.conf
指向/dev/stderr
和/dev/stdout
user nginx;
worker_processes 4;
error_log /dev/stderr;
http {
access_log /dev/stdout main;
...
,您的
Dockerfile
条目应为/usr/sbin/nginx -g 'daemon off;'
评论
当主进程未以root身份运行时不起作用
–步行者
18年12月14日10:00
评论
他们已经准备进入syslog。您可以从那里拿起它们!@MichaelHampton看起来不错,但是Docker运行一个可以写入stdout的进程,这听起来像是将其中的两个结合起来了?
您可以让守护进程使用syslog并拥有可以打印的前端进程吗?
@qkrijger,好点!现在,如果有人有经验...?