Logging

為什麼我的碼頭工人實際上沒有記錄任何東西?

  • November 16, 2018

我有以下python文件:

import time
from datetime import datetime


while True:
    time.sleep(1)
    print(datetime.now())

我已將其添加到 Dockerfile:

FROM python:3.7


WORKDIR /test
COPY test.py /test/
CMD ["python", "test.py"]

如果我建構它並執行

sudo docker run -it --name test myimage

一切都很棒。每隔一秒左右,它就會列印目前時間。

另一方面,如果我執行它:

sudo docker run -d --name test myimage

它跑到後台,但如果我這樣做……

sudo docker logs test

我什麼都得不到!不是什麼可惡的事情。

任何線索為什麼會發生這種情況,或者我怎麼能弄清楚?在我使用時而-d不是在執行時docker inspect它都給了我"Type": "json-file", "Config": {}

我在 Ubuntu 18.04 上執行 Docker 18.06.1-ce,建構 e68fc7a。

如果沒有附加 tty,python 可能會緩衝標準輸出。有很多方法可以解決這個問題,包括將此更改添加到您的腳本中:

print(datetime.now(), flush=True)

或者在不更改腳本的情況下,您可以執行stdbuf以關閉輸出緩衝:

CMD ["stdbuf", "-oL", "python", "test.py"]

引用自:https://serverfault.com/questions/940281