Ho在Docker容器中写入日志

Ho在Docker容器中写入日志,docker,logging,Docker,Logging,我制作了最简单的C应用程序,只需打印一条消息: #include <stdio.h> #include <unistd.h> int main(){ int i = 0; while(1) { sleep(1); printf("sleeping ... %d\n", i++); } } 然后,尽可能简单地运行该容器: sudo docker build -t sleeping . sudo docker run

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

#include <stdio.h>
#include <unistd.h>
int main(){
    int i = 0;
    while(1) {
        sleep(1);
        printf("sleeping ... %d\n", i++);
    }
}
然后,尽可能简单地运行该容器:

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条目:

我复制了它,并发现sleep命令是您的问题。目前我不知道确切的原因,但没有睡眠命令,它运行


也许这篇文章可以帮助您:

当您尝试在前台启动容器时,如果没有“-d”?@hannes91,会发生什么?完全一样,什么都没有!但可执行文件在主机环境中运行良好。
fflush(stdout)