Ho在Docker容器中写入日志

我做了最简单的C应用程序,只是打印一条消息:

#include <stdio.h> #include <unistd.h> int main(){ int i = 0; while(1) { sleep(1); printf("sleeping ... %d\n", i++); } } 

然后,为它做一个最简单的Dockerfile:

 FROM fedora USER root WORKDIR /root ADD sleep-play . CMD ["/root/sleep-play"] 

然后,尽可能简单地运行该容器:

 sudo docker build -t sleeping . sudo docker run --name sleeping -d sleeping 

最后,我期待看到我的标准输出, 但没有任何反应

 sudo docker logs -f sleeping ## nothing shown! 

从这里:

…默认情况下,docker日志显示命令的STDOUT和STDERR。

我做错了什么?

我不太确定,我最好的猜测是printf被缓冲,也许缓冲区不会自动刷新到这里。

尝试手动刷新它:

 fflush(stdout) 

另请参阅此相关的用于刷新手动printf语句的Stackoverflow条目: write()与stdout和printf输出不交错?

我转载了它,发现睡眠命令是你的问题。 目前我不知道这个的确切原因,但没有运行睡眠命令。

也许这篇文章可以帮助你: https : //github.com/moby/moby/issues/2838#issuecomment-194054757