如何在Docker容器中编写日志

问题描述 投票:1回答:2

我做了最简单的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

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

sudo docker logs -f sleeping
## nothing shown!

来自here:

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

我做错了什么?

docker logging
2个回答
1
投票

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

尝试手动冲洗它:

fflush(stdout)

另请参阅用于刷新手动printf语句的相关Stackoverflow条目:write() to stdout and printf output not interleaved?


1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.