docker : 在 python 脚本中使用 docker 客户端在不同的文件中捕获 STDOUT 和 STDERR
docker : Capture STDOUT and STDERR in different files using docker client in a python script
我有 python 脚本,负责 运行 docker 图像。对于 运行 我正在使用 docker 客户端的 docker 图像,运行 命令定义如下 -
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()
。
我会像这样用 detach=True
调用 run()
:
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 图像。对于 运行 我正在使用 docker 客户端的 docker 图像,运行 命令定义如下 -
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()
。
我会像这样用 detach=True
调用 run()
:
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)