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

时间:2016-02-23 19:53:07

标签: python macos docker

我正在使用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脚本运行?

3 个答案:

答案 0 :(得分:2)

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

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

如果docker ps命令失败(例如你没有启动你的d​​ocker-machine),那么check_output将抛出异常。

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

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

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

答案 1 :(得分:2)

您可以使用python docker客户端:

<key>CFBundleDisplayName</key>
<string>Package Info Example</string>

答案 2 :(得分:0)

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