我在使用Python中的docker-py模块获取在docker容器中运行的Python脚本的输出时遇到了问题。
首先,一些背景:
我创build了一个Dockerfile,并通过命令行( docker build -t myimage /path/to/dockerfile
)以正常的方式构build了我的镜像(id docker build -t myimage /path/to/dockerfile
)。 Python脚本作为ENTRYPOINT
中的ENTRYPOINT命令执行:
ENTRYPOINT ["python", "/cont_dirpath/script.py"]
包含脚本的目录在运行时被添加(绑定)到容器。
当我通过通常的docker命令行(在Ubuntu中)使用以下命令执行此操作时:
docker run -v /host_dirpath:/cont_dirpath 84730be6107f
我得到预期的Python脚本输出打印到标准输出(显示在terminal – 脚本以print result
命令结束)。 这正是我试图从Python内部完成的输出。
但是,当使用docker-py包从Python内部尝试执行此操作时,我无法查看结果 – logs
方法返回空string。 以下是我正在使用的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))
我只是得到一个空string。 我已经尝试pipe道输出的脚本echo
和cat
ENTRYPOINT
命令,但无济于事。 我怎样才能得到ENTRYPOINT
命令中运行script.py的输出成为该容器日志的一部分,所以我可以使用docker-py Python方法读取它? 我也尝试了docker-py attach
方法(我认为logs
只是这个的一个包装版本),结果相同。
我已经考虑只是写脚本输出到一个文件,而不是标准输出,但不清楚我将如何访问和使用docker-py方法读取该文件。
任何见解或build议将不胜感激!