我在dockerfile中启动了一个Python(2.7)应用程序:

CMD ["python","main.py"]

main.py在启动时打印一些字符串,然后进入循环:

print "App started"
while True:
    time.sleep(1)

只要我使用-it标志启动容器,一切都会按预期运行:

$ docker run --name=myapp -it myappimage
> App started

稍后我可以通过日志(log)看到相同的输出:

$ docker logs myapp
> App started

如果我try 使用-d标志运行同一个容器,该容器似乎会正常启动,但我看不到任何输出:

$ docker run --name=myapp -d myappimage
> b82db1120fee5f92c80000f30f6bdc84e068bafa32738ab7adb47e641b19b4d1
$ docker logs myapp
$ (empty)

但集装箱似乎仍在运行;

$ docker ps
Container Status ...
myapp     up 4 minutes ... 

"附加"也不会显示任何内容:

$ docker attach --sig-proxy=false myapp
(working, no output)

你知道哪里出问题了吗?在后台运行时,"打印"的行为是否不同?

Docker版本:

Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.4.2
Git commit (client): a8a31ef
OS/Arch (client): linux/arm
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.4.2
Git commit (server): a8a31ef

推荐答案

最后,我找到了一个在Docker中运行daemonized时查看Python输出的解决方案,这要感谢@ahmetalpbarkan over at GitHub.我自己在这里回答,以供进一步参考:

将无缓冲输出用于

CMD ["python","-u","main.py"]

而不是

CMD ["python","main.py"]

解决问题;您可以通过

docker logs myapp

现在

Python相关问答推荐

想要使用Polars groupby_Dynamic来缩减时间序列收件箱(包括空垃圾箱)

当pip为学校作业(job)安装sourcefender时,我没有收到匹配的分发错误.我已经try 过Python 3.8.10和3.10.11

如何使用关键参数按列对Pandas rame进行排序

使用Python OpenCV的文本检测分割

如何编写一个正规表达式来查找序列中具有2个或更多相同辅音的所有单词

如何在Python中增量更新DF

无法导入已安装的模块

如何让pyparparsing匹配1天或2天,但1天和2天失败?

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

如何使用LangChain和AzureOpenAI在Python中解决AttribeHelp和BadPressMessage错误?

从groupby执行计算后创建新的子框架

无法使用requests或Selenium抓取一个href链接

我如何使法国在 map 中完全透明的代码?

启用/禁用shiny 的自动重新加载

可以bcrypts AES—256 GCM加密损坏ZIP文件吗?

如果初始groupby找不到满足掩码条件的第一行,我如何更改groupby列,以找到它?

AES—256—CBC加密在Python和PHP中返回不同的结果,HELPPP

寻找Regex模式返回与我当前函数类似的结果

干燥化与列姆化的比较

Pandas—MultiIndex Resample—我不想丢失其他索引的信息´