Python 通过 aiodocker 运行 时未显示日志

Python logs not showing when run via aiodocker

我正在关注 aiodocker example,将 echo "hello world" 替换为 python -c 'print("hello world")',但未显示日志。

以下解决方案(使用 PYTHONUNBUFFERED=1flush=True-u 标志)没有帮助:

Python 当 运行 在 docker 中分离时,应用程序不打印任何内容

Why doesn't my docker actually log anything?

import asyncio
import aiodocker

async def run_container():
    docker = aiodocker.Docker()
    container = await docker.containers.create_or_replace(
        config={
            'Cmd': ['python', '-c', 'print("hello world")'],
            'Image': 'python:3.8.2-buster',
        },
        name="testing"
    )
    await container.start()
    logs = await container.log(stdout=True, stderr=True)
    print(''.join(logs))
    await container.delete(force=True)
    await docker.close()

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(run_container())
    loop.close()

还有什么问题?

请等待启动的容器完成后再获取日志:

await container.start()
await container.wait()

另一个选项是使用 follow=True 参数来获取日志:

async for chunk in container.log(stdout=True, stderr=True, follow=True):
    print(chunk)

可以应用于运行容器实例。