繁体   English   中英

如何检查docker实例是否正在运行?

[英]How to check if a docker instance is running?

我正在使用 Python 来启动 docker 实例。

我如何识别它们是否正在运行? 我可以很容易地从终端使用docker ps ,例如:

docker ps | grep myimagename

如果这返回任何内容,则图像正在运行。 如果它返回一个空字符串,则图像没有运行。

但是,我无法理解如何让subprocess.Popen使用它 - 它需要一个参数列表,例如:

    p = subprocess.Popen(['docker', 'ps', '|', 'grep', 'myimagename'], stdout=subprocess.PIPE)
    print p.stdout

不起作用,因为它试图采用“docker ps”并使其成为“docker”和“ps”命令(docker不支持)。

似乎我也不能给它完整的命令,因为Popen试图将整个第一个参数作为可执行文件运行,所以这失败了:

    p = subprocess.Popen('docker ps | grep myimagename', stdout=subprocess.PIPE)
    print p.stdout

有没有办法从 Python 实际运行docker ps 我不知道尝试使用subprocess是否是最佳途径。 然而,这是我用来运行 docker 容器的方法,所以它似乎是正确的路径。

  • 如何确定 docker 实例是否正在从 Python 脚本运行?

一种选择是使用subprocess.check_output设置shell=True (感谢slezica!):

s = subprocess.check_output('docker ps', shell=True)
print 'Results of docker ps' + s

如果docker ps命令失败(例如您没有启动check_output -machine),则check_output将抛出异常。

一个简单的查找然后可以验证您的容器是否已找到/未找到:

if s.find('containername') != -1:
    print 'found!'
else:
    print 'not found.'

在这种情况下,我也建议使用容器哈希 ID 而不是容器名称,因为该名称可能会在docker ps的图像名称或其他结果中重复。

您可以使用 python docker 客户端:

import docker
DOCKER_CLIENT = docker.DockerClient(base_url='unix://var/run/docker.sock')
RUNNING = 'running'

def is_running(container_name):
    """
    verify the status of a sniffer container by it's name
    :param container_name: the name of the container
    :return: Boolean if the status is ok
    """
    container = DOCKER_CLIENT.containers.get(container_name)

    container_state = container.attrs['State']

    container_is_running = container_state['Status'] == RUNNING

    return container_is_running

my_container_name = "asdf"
print(is_running(my_container_name))

即使看起来您正在路上,我还是建议您使用docker-py,因为它访问由 docker 创建的套接字以发出 API 请求。 我使用这个库,目前使用这个库,它是实时节省器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM