2017-12-20 10 views
1

でログを書くために:ことを実行し、その後ホー私はちょうどメッセージを印刷する最も簡単なCアプリケーション作られたドッカーコンテナ

FROM fedora 

USER root 
WORKDIR /root 

ADD sleep-play . 

CMD ["/root/sleep-play"] 

:、その後

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

をそのための最も簡単なDockerfileを作りました

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

最後に、私は私のSTDを見て期待している:それはできるような単純なコンテナ出力、出たが、何もを起こりません:

sudo docker logs -f sleeping 
## nothing shown! 

here:

から...デフォルトでは、ドッキングウィンドウのログには、コマンドのSTDOUTとSTDERRを示しています。

私は間違っていますか?

+0

? – HannesR

+0

@ hannes91まったく同じ、ただ何もない!しかし、実行環境はホスト環境でうまくいっています。 –

答えて

1

私は確信していませんが、私の最高の推測では、printfはバッファリングされていて、おそらくバッファが自動的にここでフラッシュされません。

して手動でフラッシュするようにしてください:

fflush(stdout) 

参照マニュアルのprintf文を洗い流すためにも、この関連StackOverflowのエントリ: write() to stdout and printf output not interleaved?

1

私はそれを再現し、睡眠コマンドはあなたの問題であることを考え出しました。現時点で私はこの正確な原因を知っていませんが、スリープコマンドを実行しないと実行されません。

たぶんこの記事はあなたを助けることができます:あなたは「-d」なしフォアグラウンドでコンテナを起動しようとすると起こっ何https://github.com/moby/moby/issues/2838#issuecomment-194054757

関連する問題