我有以下 python 文件:
import time
from datetime import datetime
while True:
time.sleep(1)
print(datetime.now())
Run Code Online (Sandbox Code Playgroud)
我已将其添加到 Dockerfile 中:
FROM python:3.7
WORKDIR /test
COPY test.py /test/
CMD ["python", "test.py"]
Run Code Online (Sandbox Code Playgroud)
如果我构建这个并运行
sudo docker run -it --name test myimage
Run Code Online (Sandbox Code Playgroud)
一切都很棒。大约每秒打印一次当前时间。
另一方面,如果我运行它:
sudo docker run -d --name test myimage
Run Code Online (Sandbox Code Playgroud)
它会跑到后台,但如果我这样做......
sudo docker logs test
Run Code Online (Sandbox Code Playgroud)
我什么也得不到!不是什么该死的事情。
任何线索为什么会发生这种情况,或者我怎样才能弄清楚?当我使用时-d
和不运行时docker inspect
它都会给我"Type": "json-file", "Config": {}
我在 Ubuntu 18.04 上运行 Docker 18.06.1-ce,构建 e68fc7a。
如果没有附加 tty,Python 可能会缓冲标准输出。有很多方法可以解决这个问题,包括将此更改添加到您的脚本中:
print(datetime.now(), flush=True)
Run Code Online (Sandbox Code Playgroud)
或者,无需更改脚本,您可以运行stdbuf
以关闭输出缓冲:
CMD ["stdbuf", "-oL", "python", "test.py"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15950 次 |
最近记录: |