所以,我在Docker容器中运行了一些Python代码。我使用Google的gcloud脚本启动了我的本地环境。我看到了基本的访问方式日志和运行状况检查信息,但我不确定如何通过我的Python应用程序向控制台写入日志消息。我可以设置一个参数来使用我的gcloud脚本完成此操作,或者我可以在Dockerfile中设置哪些可以提供帮助的参数?
答案 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 日志,因为日志记录重新附加到不同的/衍生的进程。