【发布时间】:2014-06-24 20:29:45
【问题描述】:
这里的目的是使用 docker 容器作为安全沙箱来运行不受信任的 python 脚本,但要在 python 中使用 docker-py 模块执行此操作,并且能够捕获该脚本的输出。
我在 docker 容器中运行 python 脚本 foo.py(它在我的 Dockerfile 中设置为 ENTRYPOINT 命令,所以它在容器运行后立即执行)并且无法捕获它的输出脚本。当我使用
docker run -v /host_dirpath:/cont_dirpath my_image
(host_dirpath 是包含 foo.py 的目录)我将 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 语句打印到标准输出。如何将它包含在 docker 容器日志中,以便我可以从 python 中读取它?或者以其他方式从容器外部捕获此输出?
任何帮助将不胜感激。提前致谢!
编辑:
docker-py 仍然没有运气,但是在使用 subprocess.Popen 使用普通 CLI 运行容器时它运行良好 - 执行此操作时,输出确实被 stdout 正确抓取。
【问题讨论】:
-
我来这里是为了查看输出:
docker logs -f [container id]非常适合我检查容器中运行的烧瓶应用程序。
标签: python linux docker dockerpy