Python 如何在dockerpy中通过管道从docker运行标准输出
当我像这样正常运行docker映像时Python 如何在dockerpy中通过管道从docker运行标准输出,python,docker,dockerpy,Python,Docker,Dockerpy,当我像这样正常运行docker映像时 docker run -v ..... {DOCKER_IMAGE} 我按预期在终端中获取日志。但是像这样跑: docker_client = docker.from_env() container = docker_client.containers.run(DOCKER_IMAGE, None, environment=[f'foo={self.profile}'], volumes={...,}, auto_remove=True, stderr
docker run -v ..... {DOCKER_IMAGE}
我按预期在终端中获取日志。但是像这样跑:
docker_client = docker.from_env()
container = docker_client.containers.run(DOCKER_IMAGE, None, environment=[f'foo={self.profile}'],
volumes={...,}, auto_remove=True, stderr=True, stdout=True)
# No logs show up
似乎抑制了日志。如何在日志运行时获取日志输出?我可以流化docker容器运行吗
我能做到
docker_client.containers.run(.... detach=True)
for line in container.logs(stream=True):
print(line)
但是这会丢失它是否是调试/信息/警告/错误
docker logs -f <CONTAINER>
请参阅本页:设置
stream=True如何
没有测试过,但在测试中显示:
stream
(bool)–如果为true且detach
为false,则返回日志生成器
而不是字符串。如果“分离”为true,则忽略。默认值:False
请试一试,告诉我进展如何
更新:
在谷歌搜索“stream”之后,我发现了一个类似的问题,可能会对您有所帮助。在通过dockerpy运行run命令后,我需要流式处理logoutput。您是否尝试过指定detach=False
?@alan.elkin是的,如果我将detach=False设置为False,它只会等待终止,然后containers.logs就会拥有一切。但我需要在日志出来时对其进行流式处理。据我所知,默认情况下它是detach=False,我可以将detach=True设置为True,然后迭代日志。在detach=True
情况下,函数print
将在运行时打印容器生成的确切日志(取决于容器中的应用程序、应用程序日志,这一切),甚至停止。“丢失调试/信息/警告/错误”到底是什么意思?这是您在python文件中自定义的日志级别吗?我的问题包括使用stream=True的示例,它允许我在分离时迭代每个日志条目,但它不保留它是什么类型的日志、错误、信息、调试等。我显式地试图避免为了运行docker映像而进行炮击。在您的操作中,您在logs
方法中使用stream=True
,但在run
方法中没有使用(与detach=False一起使用)