асинхронная задача для печати журналов докера с использованием Python Docker SDK - PullRequest
0 голосов
/ 07 июня 2019

Используя Python Docker SDK, я хочу создать задачу, которая печатает журналы контейнера Docker всякий раз, когда этот контейнер выводит что-либо в stdout или stderr, но, хотя нет журналов для печати, он освобождает цикл обработки событий и завершает работу. делать другие вещи.

Я пытался использовать client.logs :

client = docker.APIClient(base_url='tcp://localhost:2375')
async def my_logging_task():
    while True:
        for log in client.logs('my_container', stdout=True, stderr=True):
            print(log)
         await asyncio.sleep(1)

Однако, это просто печатает одни и те же целые числа снова и снова. Также не уверен, почему журнал является целым числом.

Я попытался добавить параметр stream = True в client.logs

Теперь я правильно получаю печатные строки журнала, однако теперь client.logs блокируется, а my_logging_task никогда не отпускает цикл событий, даже когда нет новых журналов для печати. ​​

Как правильно создать асинхронную задачу, которая просто печатает журналы док-контейнера?

РЕДАКТИРОВАТЬ 7 июня 2019 г .:

Я также пытался использовать client.attach :

async def my_logging_task():
    stream = self._client.attach('my_container', stdout=True, stderr=True, stream=True, logs=True)
    while True:
        line = next(stream)
        print(line)
        await asyncio.sleep(1)

Но хотя это правильно печатает журналы из моего контейнера, ни одна из моих других задач, которые я создал, никогда не вызывается.

1 Ответ

0 голосов
/ 08 июня 2019

На самом деле, я не думаю, что есть способ сделать это в настоящее время.Мой вопрос в основном такой же, как этот открытый вопрос: https://github.com/docker/docker-py/issues/2136

...