我无法获取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
命令中将脚本输出汇总到cat
和ENTRYPOINT
,但无济于事。如何在ENTRYPOINT
命令中运行script.py的输出,使其成为该容器日志的一部分,以便我可以使用docker-py Python方法读取它?我也尝试过docker-py attach
方法(我认为logs
只是这个的包装版本),结果相同。
我考虑过将脚本输出写入文件而不是stdout,但是我不清楚如何使用docker-py方法访问和读取该文件。
非常感谢任何见解或建议!
答案 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)