2

我正在尝试使用 docker-py 执行一些长进程我的问题是我无法看到我正在做的事情的输出......

如何将 docker exec 的输出直接流式传输到 stdout ?还是更好地记录?

我已经看到有一个“流”参数,但我不明白如何使用返回的生成器......

        exec_c=self.docker.exec_create(myContainer,e["cmd"])
        output=self.docker.exec_start(exec_c)
        self.logger.info(output)

http://docker-py.readthedocs.org/en/latest/api/?highlight=exec#exec_create

4

2 回答 2

5

如何获得标准输出的示例。默认标准输出为真 o 完整标准输出=真

这是python代码:

from docker import Client
cli = Client(base_url='unix://var/run/docker.sock')

id_container = '14484253f0a8'
cli.start(id_container)
cmds='ls' #comand to execute

exe = cli.exec_create(container=id_container, cmd=cmds)
exe_start= cli.exec_start(exec_id=exe, stream=True)

for val in exe_start:
    print (val)

我希望它有所帮助。

于 2016-11-22T22:10:36.830 回答
0

这是我用来从构建命令中获取响应的代码。您应该能够使此代码适应 exec_start 的需要。

创建 StreamLineBuilder 生成器:

import json
class StreamLineBuildGenerator(object):
    def __init__(self, json_data):
        self.__dict__ = json.loads(json_data)

然后使用这个生成器来解析你的流:

import docker
docker_client = docker.Client(version="1.18", base_url="unix:///var/run/docker.sock")

generator = docker_client.build(nocache=False, rm=True, stream=True, tag="my_image_tag", path="my_path")

for line in generator:
    try:
        stream_line = StreamLineBuildGenerator(line)
        # Do something with your stream line
        # ...
    except ValueError:
        # If we are not able to deserialize the received line as JSON object, just print it out
        print(line)
        continue
于 2016-02-16T15:01:07.453 回答