这里的目标是使用docker容器作为安全沙箱来运行不受信任的
python脚本,但是使用docker-py模块在python内执行此操作,并且能够捕获该脚本的输出.
我在Docker容器中运行一个python脚本foo.py(在Docker文件中设置为ENTRYPOINT命令,因此一旦容器运行就执行它),并且无法捕获该脚本的输出.当我通过正常的CLI使用容器运行时
docker run -v /host_dirpath:/cont_dirpath my_image
(host_dirpath是包含foo.py的目录)我得到打印到stdout的foo.py的预期输出,这只是一个键值对的字典.但是,我正在使用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('my_image', volumes={"/cont_dirpath":""})
docker.start(contid, binds={"/host_dirpath": {"bind": "/cont_dirpath"} })
print "Docker logs: " + str(docker.logs(contid))
这只是导致“Docker日志:” – 在日志中没有捕获任何东西,既不是stdout也不是stderr(我尝试在foo.py中引发异常来测试).
我以后的结果是由foo.py计算的,目前只是使用python print语句打印到stdout.我如何才能将其包含在docker容器日志中,以便我可以从python中读取它?或者从容器外面以其他方式捕获此输出?
任何帮助将不胜感激.提前致谢!
编辑:
仍然没有运气与docker-py,但它运行良好的运行容器与正常的CLI使用subprocess.Popen – 输出确实被stdout正确抓住了这样做.