我正在尝试使用docker-py执行一些长进程 我的问题是我无法看到我正在做的输出......
如何将docker exec的输出直接流式传输到stdout?或者更好地记录?
我看过有一个“stream”参数,但我不知道如何使用返回的生成器......
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
答案 0 :(得分:5)
如何获得stdout输出的示例。 Stdout默认为true o complet stdout = true
这是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)
我希望它有所帮助。
答案 1 :(得分: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