docker-py:如何获取容器内进程 运行 返回的退出代码?
docker-py: How to get exit code returned by process running inside container?
我的 python 脚本使用 docker-py
启动一个 docker 容器,如下所示:
client = docker.from_env()
result = client.containers.run(
image="my-prog-image:latest",
command=["/etc/my-prog/configs.ini"],
auto_remove=True,
network_mode="host",
)
如 docker-py: containers 所述,client.containers.run(...)
方法 returns 容器。如何检索容器内 my-prog
运行 返回的退出代码?
result.wait()
应该等待容器 运行 完成,然后 return 它的退出代码。
但是,您可能会遇到一些麻烦,因为您指定了 auto_remove=True
但没有指定 detach=True
。 run()
没有 detach=True
将 运行 容器完成,然后 auto_remove=True
选项将删除容器,此时状态代码不再存在。您可以明确地拆分这些步骤:
client = docker.from_env()
container = client.containers.run(
image="my-prog-image:latest",
command=["/etc/my-prog/configs.ini"],
detach=True,
)
result = container.wait()
container.remove()
(在 Docker CLI 术语中,您已完成 docker run --rm ...
,然后尝试使用 docker ps -a
查找容器的结果,但容器已消失;我建议更改它在没有 --rm
的情况下 docker run -d ...
,检查 docker ps
输出,然后手动 docker rm
容器。实际上,甚至还有一个 docker wait
CLI command,但很少使用。)
我的 python 脚本使用 docker-py
启动一个 docker 容器,如下所示:
client = docker.from_env()
result = client.containers.run(
image="my-prog-image:latest",
command=["/etc/my-prog/configs.ini"],
auto_remove=True,
network_mode="host",
)
如 docker-py: containers 所述,client.containers.run(...)
方法 returns 容器。如何检索容器内 my-prog
运行 返回的退出代码?
result.wait()
应该等待容器 运行 完成,然后 return 它的退出代码。
但是,您可能会遇到一些麻烦,因为您指定了 auto_remove=True
但没有指定 detach=True
。 run()
没有 detach=True
将 运行 容器完成,然后 auto_remove=True
选项将删除容器,此时状态代码不再存在。您可以明确地拆分这些步骤:
client = docker.from_env()
container = client.containers.run(
image="my-prog-image:latest",
command=["/etc/my-prog/configs.ini"],
detach=True,
)
result = container.wait()
container.remove()
(在 Docker CLI 术语中,您已完成 docker run --rm ...
,然后尝试使用 docker ps -a
查找容器的结果,但容器已消失;我建议更改它在没有 --rm
的情况下 docker run -d ...
,检查 docker ps
输出,然后手动 docker rm
容器。实际上,甚至还有一个 docker wait
CLI command,但很少使用。)