Используя 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)
Но хотя это правильно печатает журналы из моего контейнера, ни одна из моих других задач, которые я создал, никогда не вызывается.