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

如何显示在Docker容器中运行的Python应用程序的输出?

公宜春
2023-03-14

所以,我在Docker容器中运行了一些Python代码。我使用谷歌的gCloud脚本启动了我的本地环境。我看到了基本的访问风格日志和健康检查信息,但我不确定如何将我正在从Python应用程序编写的日志消息传递到控制台。有没有一个参数我可以设置来完成我的gCloud脚本,或者有什么我可以在Dockerfile中设置,可以帮助?

共有2个答案

卢磊
2023-03-14

(根据评论回答)

如果将应用包装为docker-compose,则不需要知道容器ID。只需将docker-compose.yml添加到您的Dockerfile旁边。这听起来可能是一种额外的间接性,但对于一个简单的应用程序来说,它就像这样微不足道:

version: "3.3"

services:
  build: .
  python_app:
    environment:
      - PYTHONUNBUFFERED=1

就这样。拥有它的好处是,您不需要传递docker需要的很多标志,因为它们是自动添加的。如果以后需要卷和环境变量,它还简化了使用它们的工作。

您可以通过服务名称查看日志:

docker-compose logs python_app

顺便说一下,如果我在本地测试某些东西,我宁愿设置PYTHONUNBUFFERED=1。它禁用了缓冲,这使得日志在本地更具确定性。我有很多日志问题,例如,当我试图在我的python应用程序中旋转grpc服务器时,因为服务器启动前刷新的日志并不都是我想看到的初始化日志。一旦服务器启动,您将看不到初始化日志,因为日志重新附加到另一个/生成的进程。

孙熠彤
2023-03-14

为了让Python登录你的终端/命令行/控制台,当从docker容器执行时,你应该在你的docker-compose.yml中设置这个变量

  environment:
    - PYTHONUNBUFFERED=0

如果使用print进行调试,这也是一个有效的解决方案。

 类似资料:
  • 问题内容: 我有一个在我的dockerfile中启动的Python(2.7)应用程序: main.py 在启动时会打印一些字符串,然后进入循环: 只要我使用-it标志启动容器,一切都会按预期进行: 我稍后可以通过日志看到相同的输出: 如果我尝试使用-d标志运行相同的容器,则该容器似乎正常启动,但看不到任何输出: 但是容器似乎仍在运行; 附件也不显示任何内容: 任何想法出什么事了吗?在后台运行时,“

  • 我正在测试一些与比特币相关的代码,为了测试它,我在docker容器中安装了比特币测试网盒。 我使用这个指南:https://registry.hub.docker.com/u/freewil/bitcoin-testnet-box/ 我没有任何问题地拉和运行码头工人。 但是,我无法编辑其目录中的bitcoin.conf文件,因为我没有安装像NANO这样的编辑器。 我想: 但它不起作用。我该怎么解决

  • Dockerfile文件 docker撰写。yml 我发射的命令是为了让这个起来 docker-compose-fdocker-compose.yml 之后我去了https://localhost:3000这个项目没有加载。这是可复制的回购协议https://github.com/reyanshmishra/My-Portfolio-ReactJS 谢啦

  • 问题内容: 我有以下用于docker文件的文件… 和弹簧配置… 一切似乎都开始文件,我明白了 我看到… 但是当我运行并在这样的浏览器中输入该地址时,出现超时错误。我知道我可以在运行时使用端口映射,但是有没有一种方法可以映射到我的本地主机呢? 我也尝试过这个… 因此它不是浏览器。 还试图像这样映射它… 0.0.0.0:8080->8080/tcp、9090/tcp 但是localhost:8080(

  • 问题内容: 我使用第三方GUI(Synology Docker软件包)来设置Docker容器。但是,它的局限性使我需要从命令行运行容器。(我想映射另一个主机IP绑定端口) 现在,由于已经完成了许多设置,因此我想检索启动该容器的原始运行命令,然后可以将端口映射端口更改为新端口。例如。“ ” 我找不到这样做的方法,事件使用“ docker inspect”,没有提供此类信息。 请提供一些建议以解决此问

  • 我一步一步做了什么: 1)构建我的应用程序(结果,我的出现在文件夹中) 2)移动到所在的目录,并执行命令: 3)以容器形式运行此: 结果,我的应用程序成功启动。 但现在我决定在我的申请中改变一些东西。我做了,试着重复所有的步骤。