等待 Docker 容器使用 Python SDK 运行

Mig*_*ell 4 python docker dockerpy

使用dockerPython 模块,您可以像这样启动一个分离的容器:

import docker
client = docker.from_env()
container = client.containers.run(some_image, detach=True)
Run Code Online (Sandbox Code Playgroud)

我需要等待这个容器running(即container.status == 'running')。如果您在创建容器后立即检查状态,它将报告此情况,这意味着它尚未准备好:

>>> container.status
"created"
Run Code Online (Sandbox Code Playgroud)

API 确实提供了一种wait()方法,但这仅等待终止状态,例如exitremoved: https: //docker-py.readthedocs.io/en/stable/containers.html#docker.models.containers.Container.wait

如何等到我的容器running用于dockerPython?

Idu*_*oad 9

您可以使用带有超时的 while 循环

import docker
from time import sleep 

client = docker.from_env()
container = client.containers.run(some_image, detach=True)

timeout = 120
stop_time = 3
elapsed_time = 0
while container.status != 'running' and elapsed_time < timeout:
    sleep(stop_time)
    elapsed_time += stop_time
    continue
Run Code Online (Sandbox Code Playgroud)

  • 根据我的经验,当容器开始运行时,“container.status”不会从“created”更新为“running”。您应该使用 docker.containers.get(container.id) 来获取最新状态。 (10认同)
  • @bjschoenfeld,要更新容器状态,您还可以使用 `container.reload()` 而不是 `docker.containers.get(container.id)`。 (7认同)