Docker-py: 有没有办法在 'detach' 模式下将回调函数传递给容器 运行?
Docker-py: Is there a way to pass a callback function to a container running in 'detach' mode?
我是 运行 一个在 Python 中有 docker-py 的容器。类似于文档:
import docker
client = docker.from_env()
container = client.containers.run('bfirsh/reticulate-splines', detach=True)
容器执行一些任务并将 .json
文件保存到共享卷。
一切正常,除了我不知道如何在后台 运行 时捕获容器退出。
更具体地说,我的问题如下:
“docker-py 中有没有办法在分离模式下将回调函数传递给容器运行?”
我想在退出 时访问保存的 .json
并避免使用像 time.sleep()
这样丑陋的语句或在 status is running
时迭代。
从文档来看,这似乎是不可能的。您有任何解决方法可以分享吗?
回答我自己的问题,我采用了以下使用线程的解决方案。
import docker
import threading
def run_docker():
""" This function run a Docker container in detached mode and waits for completion.
Afterwards, it performs some tasks based on container's result.
"""
docker_client = docker.from_env()
container = docker_client.containers.run(image='bfirsh/reticulate-splines', detach=True)
result = container.wait()
container.remove()
if result['StatusCode'] == 0:
do_something() # For example access and save container's log in a json file
else:
print('Error. Container exited with status code', result['StatusCode'])
def main():
""" This function start a thread to run the docker container and
immediately performs other tasks, while the thread runs in background.
"""
threading.Thread(target=run_docker, name='run-docker').start()
# Perform other tasks while the thread is running.
我是 运行 一个在 Python 中有 docker-py 的容器。类似于文档:
import docker
client = docker.from_env()
container = client.containers.run('bfirsh/reticulate-splines', detach=True)
容器执行一些任务并将 .json
文件保存到共享卷。
一切正常,除了我不知道如何在后台 运行 时捕获容器退出。
更具体地说,我的问题如下:
“docker-py 中有没有办法在分离模式下将回调函数传递给容器运行?”
我想在退出 时访问保存的 .json
并避免使用像 time.sleep()
这样丑陋的语句或在 status is running
时迭代。
从文档来看,这似乎是不可能的。您有任何解决方法可以分享吗?
回答我自己的问题,我采用了以下使用线程的解决方案。
import docker
import threading
def run_docker():
""" This function run a Docker container in detached mode and waits for completion.
Afterwards, it performs some tasks based on container's result.
"""
docker_client = docker.from_env()
container = docker_client.containers.run(image='bfirsh/reticulate-splines', detach=True)
result = container.wait()
container.remove()
if result['StatusCode'] == 0:
do_something() # For example access and save container's log in a json file
else:
print('Error. Container exited with status code', result['StatusCode'])
def main():
""" This function start a thread to run the docker container and
immediately performs other tasks, while the thread runs in background.
"""
threading.Thread(target=run_docker, name='run-docker').start()
# Perform other tasks while the thread is running.