docker-py:访问在ENTRYPOINT命令中运行的python脚本输出

时间:2014-05-02 22:14:07

标签: python linux docker dockerpy

我无法获取Python脚本的输出我使用Python中的docker-py模块在docker容器中运行。

首先,一些背景:

我已经通过命令行(docker build -t myimage /path/to/dockerfile)以正常方式创建了一个Dockerfile并构建了我的图像(ID为84730be6107f)。 Python脚本作为Dockerfile中的ENTRYPOINT命令执行:

ENTRYPOINT ["python", "/cont_dirpath/script.py"]

包含脚本的目录在运行时添加(绑定)到容器。

当我通过通常的docker命令行(在Ubuntu中)使用:

执行此操作时
docker run -v /host_dirpath:/cont_dirpath 84730be6107f

我将预期的Python脚本输出打印到stdout(显示在终端中 - 脚本以print result命令结束)。这正是我在Python中尝试获得的输出。

但是,当尝试使用docker-py包在Python中执行此操作时,我无法查看结果 - logs方法返回空字符串。这是我使用的Python代码:

from docker import Client

docker = Client(base_url='unix://var/run/docker.sock',
                  version='1.10',
                  timeout=10)

contid = docker.create_container('84730be6107f', volumes={"/cont_dirpath":""})
docker.start(contid, binds={"/host_dirpath": {"bind": "/cont_dirpath"} })

print "Docker logs: \n" + str(docker.logs(contid))

我只是得到一个空字符串。我已尝试在echo命令中将脚本输出汇总到catENTRYPOINT,但无济于事。如何在ENTRYPOINT命令中运行script.py的输出,使其成为该容器日志的一部分,以便我可以使用docker-py Python方法读取它?我也尝试过docker-py attach方法(我认为logs只是这个的包装版本),结果相同。

我考虑过将脚本输出写入文件而不是stdout,但是我不清楚如何使用docker-py方法访问和读取该文件。

非常感谢任何见解或建议!

1 个答案:

答案 0 :(得分:0)

当您尝试使用kubectl查看日志时会发生什么?

kubectl logs $CONTAINERID

我猜你什么也看不到。

您在容器内的工作量是多少?

如果您的代码像这样无头运行,Python会对缓冲区做一些奇怪的事情:

import time
while True:
   print('something')
   time.sleep(1)

要使其正常工作,您需要手动刷新循环的打印语句:

import time
import sys
while True:
   print('something')
   sys.stdout.flush()
   time.sleep(1)
相关问题