Logging
為什麼我的碼頭工人實際上沒有記錄任何東西?
我有以下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"]