当前位置: 首页 > 知识库问答 >
问题:

为什么我看不到docker日志?[副本]

华子昂
2023-03-14

我有一个简单的脚本,每2秒打印一次hello。

# entry.py

import time

while True:
    print("hello")
    time.sleep(2)

我有一个超简单的docker文件运行这个脚本。


FROM python:3.9

COPY entry.py entry.py

CMD python entry.py

首先我建立docker映像:

$ docker build -t dtest .

现在,我使用-it选项运行它,它按预期工作。

$ docker run -it dtest
# hello printed to screen every two seconds

但是当我以分离模式运行它,然后尝试查看日志时,我什么也看不到。

$ docker run -d dtest
e19f7285c098af582e163354be84774d1307b2409337cb03bdd217292899bdb7

$ docker ps
CONTAINER ID   IMAGE       COMMAND                  CREATED          STATUS          PORTS     NAMES
e19f7285c098   dtest       "/bin/sh -c 'python …"   20 seconds ago   Up 18 seconds             epic_chatterjee

$ docker logs epic_chatterjee
# nothing is shown, exits

$ docker logs -f epic_chatterjee
# a cursor keeps blinking but nothing shown

共有1个答案

夏侯渊
2023-03-14

这与Python缓冲输出的方式有关。由于写入stdout的计算代价很高,因此它会尝试收集大的缓冲区,只有在没有连接终端的情况下才会偶尔刷新它们。

您可以将您的Python代码更改为:

print("Hello", flush=True)

或者使用强制无缓冲输出的-u标志运行python

FROM python:3.9
COPY entry.py entry.py
ENTRYPOINT ["python", "-u"]
CMD ["entry.py"]
 类似资料:
  • 我是一个很新的编码,我一直有问题的物理计算器,我一直在做。我做这件事是为了在类项目中使用OOP。我的要点是让用户输入变量,然后它们被运到类文件上的等式中,然后最后显示结果。当我尝试编译时,它说函数getAnswer看不到它上面声明的结果。我计划对这个方程进行16次迭代,所以我首先要弄清楚为什么这一次不起作用。欢迎任何回答。 -谢谢 这是类文件

  • 本页和本答案都引用了IP地址172.22.0.3。通过RFC 1918,它在专用网络范围172.16.0.0-172.31.255.255内。它也在我自己的代码中(在docker中运行),但我忘记了为什么。 是Docker默认吗?你能找到推荐人吗?

  • 我使用Log4J来记录应用程序运行时进程。这是我的log4j。属性文件: 我已经在Tomcat上部署了应用程序,并调用了一些它的方法来获取日志消息。在这些操作之后,在${CATALINA_HOME}/logs文件夹中,我得到了一些. log文件: 卡塔琳娜。2017-02-12.日志(没有我的应用信息) 在我的应用程序中,我得到的记录器为: 我还尝试用INFO和ERROR级别记录消息。 结果,我得

  • 我已经使用开发人员沙盒帐户构建了一个集成。我最近将我的应用程序升级为live,并将我的生产环境配置为使用新的集成id和secret以及live Docusign url。 但是,当我尝试在应用程序的帐户中创建oauth连接时,我的服务器会获取一个代码,将客户端重定向到Docusign以进行身份验证,但Docusign登录屏幕显示错误“没有向Docusign注册的重定向URI”。事实并非如此-我的开

  • 使用指南 - 疑难问题 - 数据缺失或无数据问题 - 为什么看不到热力图 设置热力图的页面上边没有正确添加当前站点的统计代码 网站有跳转,但是热力图上边设置的监控网址是跳转之前的,请用跳转之后的网址设置; 注意查看时间,热力图是隔一天后才有数据的; 偶尔浏览器的显示存在问题,请将页面设置为100%大小,并作刷新处理,且建议使用Chrome和Firefox浏览器。 页面上添加了禁止iframe加载的

  • 我正在尝试使用argparse模块使我的Python程序接受灵活的命令行参数。我想传递一个简单的布尔标志,并说或来执行代码中的相应分支。 请考虑以下内容。 这是为什么?!!intflag似乎解析正确,但布尔标志总是解析为,即使我在命令行参数中明确提到我希望它是。 我哪里错了?