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

时间:2014-12-04 18:37:45

标签: docker boot2docker gcloud dockerfile

所以,我在Docker容器中运行了一些Python代码。我使用Google的gcloud脚本启动了我的本地环境。我看到了基本的访问方式日志和运行状况检查信息,但我不确定如何通过我的Python应用程序向控制台写入日志消息。我可以设置一个参数来使用我的gcloud脚本完成此操作,或者我可以在Dockerfile中设置哪些可以提供帮助的参数?

2 个答案:

答案 0 :(得分:21)

要让Python登录您的终端/命令行/控制台,当从docker容器执行时,您应该在docker-compose.yml

中设置此变量
  environment:
    - PYTHONUNBUFFERED=0

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

答案 1 :(得分:0)

(根据评论回答)

如果将应用程序包装到 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 服务器时,因为在服务器启动之前刷新的日志并不是我想看到的所有 init 日志。一旦服务器启动,您将看不到 init 日志,因为日志记录重新附加到不同的/衍生的进程。