在容器停止之前,“ Docker日志”错误地显示为空

在运行调用Python进程的Docker容器时,运行 rday = function( start_day = as.Date("2019-01-01"),end_day = as.Date("2019-01-31"),weekend_weight = 2,... ) { if (! "Date" %in% class(start_day)) start_day = as.Date(start_day) if (! "Date" %in% class(end_day)) end_day = as.Date(end_day) dates = seq(start_day,end_day,by = "1 day") weights = rep(1,length(dates)) weights[weekdays(dates) %in% c("Saturday","Sunday")] = 1 sample(dates,...,prob = weights) } rday(size = 15) # [1] "2019-01-24" "2019-01-07" "2019-01-21" "2019-01-15" "2019-01-27" "2019-01-04" "2019-01-30" "2019-01-12" # [9] "2019-01-11" "2019-01-08" "2019-01-20" "2019-01-01" "2019-01-03" "2019-01-19" "2019-01-29" 不会返回任何内容,尽管容器内部发生了事件会发给docker logs #####。直到我运行stdout为止,日志中才会出现该注释,在这种情况下,将返回预期的输出。 docker stop ######也是如此,直到容器停止之后,什么也没有出现,即使是预期的情况。

这对于调试非常麻烦。 为什么会发生这种情况?我可以更改一个设置以确保日志实时更新吗?

heihei2008 回答:在容器停止之前,“ Docker日志”错误地显示为空

这可能是因为stdout和stderr是缓冲流。

  

交互式时,stdout和stderr流是行缓冲的。否则,它们将像常规文本文件一样被块缓冲。您可以使用-u命令行选项覆盖此值。

尝试添加-u标志。

CMD [ "python","-u","./your_script.py" ]

或者,正如David Maze指出的那样,您可以设置PYTHONUNBUFFERED environment variable并获得相同的结果。

ENV PYTHONUNBUFFERED=1

您还可以在每次调用print()时刷新标准输出。

sys.stdout.flush()

或者,请参见logging module

本文链接:https://www.f2er.com/3163650.html

大家都在问