我制作了最简单的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。
我做错了什么?
答案 0 :(得分:1)
我不太确定,我最好的猜测是printf是缓冲的,也许缓冲区不会在这里自动刷新。
尝试手动冲洗它:
fflush(stdout)
另请参阅用于刷新手动printf语句的此相关Stackoverflow条目: write() to stdout and printf output not interleaved?
答案 1 :(得分:1)
我复制了它并发现睡眠命令是你的问题。目前我不知道确切的原因,但没有睡眠命令它运行。
也许这篇文章可以帮助您:https://github.com/moby/moby/issues/2838#issuecomment-194054757