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

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

我如何确定它们是否正在运行? 我可以很容易地从terminal使用docker ps ,如:

 docker ps | grep myimagename 

如果这返回任何东西,图像正在运行。 如果它返回一个空string,图像不运行。

然而,我不明白如何获得subprocess.Popen工作与此 – 它需要一个参数列表如下所示:

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

不工作,因为它试图把“dockerps”,使“泊坞窗”和“PS”命令(泊坞窗不支持)。

看起来我完全可以给它完整的命令,因为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将会抛出exception。

一个简单的查找可以validation你的容器是否被find/未find:

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

在这种情况下,我build议使用容器哈希ID,而不是容器名称 ,因为名称可能会复制到镜像名称或docker ps其他结果中。

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