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.