15

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

4

2 回答 2

28

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

  environment:
    - PYTHONUNBUFFERED=0

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

于 2015-06-12T00:35:38.987 回答
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 日志。一旦服务器启动,您将看不到初始化日志,因为日志重新附加到不同/衍生的进程。

于 2021-06-22T08:18:55.453 回答