gpt4 book ai didi

python - docker:使用python脚本中的docker client,在不同文件中捕获STDOUT和STDERR

转载 作者:行者123 更新时间:2023-12-02 20:46:31 26 4
gpt4 key购买 nike

我有负责执行docker image的python脚本。为了运行docker镜像,我使用了docker client,运行命令的定义如下:

def run_docker(self, cred, image, env, volumes, cmd):
"""
Docker image needs to be executed after image is successfully pulled,
and docker command is contructed based on the job parameters.
"""

self.log.info('run_docker', state=self.state)
self._docker_login(cred)
self.docker_client = docker.from_env()
self.container = self.docker_client.containers.run(
image,
environment=env,
volumes=volumes,
command=cmd,
stderr=True,
remove=True,
)

有两个问题-
1)删除容器时,同时捕获STDOUT和STDERR的docker日志文件也将被删除。
由于这个问题,我决定将STDOUT和STDERR写入两个不同的文件中,以便用户能够以最大的灵活性来分析STDERR和STDOUT。

在使用此处提到的Docker客户端时-
https://docker-py.readthedocs.io/en/stable/containers.html
参数已在运行命令中进行了相应修改。
但是我无法弄清楚如何做到这一点。
docker 客户端也没有提到如何使用日志记录插件。

欢迎任何帮助或建议。

最佳答案

不要使用remove=True。您可以稍后再调用self.container.remove()

我会这样调用run()detach=True:

self.container = self.docker_client.containers.run(
image,
environment=env,
volumes=volumes,
command=cmd,
stderr=True,
detach=True,
)

然后,我将等待 self.container.wait()并像这样分别检索stdout和stderr的日志:
out = self.container.logs(stdout=True, stderr=False)
err = self.container.logs(stdout=False, stderr=True)

关于python - docker:使用python脚本中的docker client,在不同文件中捕获STDOUT和STDERR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496793/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com