`docker run` 作为 Prefect 任务

the*_*Dmi 8 docker prefect

我应该在 Prefect 流程中作为任务运行的实际工作负载都打包为 docker 镜像。所以流基本上只是“运行这个容器,然后运行那个容器”。

但是,我找不到任何关于如何轻松启动 docker 容器作为任务的示例。基本上,我只需要docker run一个流。

我知道https://docs.prefect.io/api/latest/tasks/docker.html并尝试了CreateContainer和 的各种组合StartContainer,但没有任何运气。

小智 8

对于您的用例,使用 Prefect 任务库中的 Docker 任务可能如下所示:

from prefect import task, Flow
from prefect.tasks.docker import (
    CreateContainer,
    StartContainer,
    GetContainerLogs,
    WaitOnContainer,
)

create = CreateContainer(image_name="prefecthq/prefect", command="echo 12345")
start = StartContainer()
wait = WaitOnContainer()
logs = GetContainerLogs()


@task
def see_output(out):
    print(out)


with Flow("docker-flow") as flow:
    container_id = create()
    s = start(container_id=container_id)
    w = wait(container_id=container_id)

    l = logs(container_id=container_id)
    l.set_upstream(w)

    see_output(l)

flow.run()
Run Code Online (Sandbox Code Playgroud)

上面的这个片段将创建一个容器,启动它,等待完成,检索日志,然后将输出打印echo 12345到命令行。

或者,您也可以直接在您自己的任务中使用 Docker Python 客户端https://docker-py.readthedocs.io/en/stable/api.html#module-docker.api.container

  • 在 prefect 2.2.0 中,情况不再如此。你能提供这个例子,但对于完美的 v2 @Josh (2认同)