docker-py exec_start как направить вывод на стандартный вывод

Я пытаюсь выполнить несколько длинных процессов с помощью docker-py. Моя проблема в том, что я не могу увидеть результат того, что я делаю...

Как я могу передать вывод из docker exec прямо на стандартный вывод? или лучше логировать?

Я видел, что есть параметр "поток", но я не понимаю, как использовать возвращаемый генератор...

        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


person OpenStove    schedule 04.02.2016    source источник


Ответы (2)


Пример того, как вы можете получить вывод stdout. Stdout по умолчанию имеет значение true или завершено stdout=true

Вот код питона:

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)

Я надеюсь, что это помогает.

person Y. Tabares    schedule 22.11.2016

Вот код, который я использую для получения ответов от команд сборки. Вы должны быть в состоянии адаптировать этот код к потребностям 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
person Fabien Balageas    schedule 16.02.2016
comment
stream=True с тех пор устарел и больше ничего не делает. Теперь вам придется использовать низкоуровневый API. См. также github.com/docker/docker- py/blob/мастер/докер/модели/ - person renefritze; 09.10.2017