使用 Python Docker SDK 打印 docker 日志的异步任务



使用 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也不会放弃事件循环。

制作仅打印 docker 容器日志的异步任务的正确方法是什么?

编辑六月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)

但是,虽然这正确地打印了我的容器中的日志,但我创建的其他任务都不会被调用。

实际上,我认为目前没有办法做到这一点。我的问题与这个未解决的问题基本相同:https://github.com/docker/docker-py/issues/2136

最新更新