我正在使用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容器的东西,所以它似乎是正确的路径。
答案 0 :(得分:2)
一种选择是使用subprocess.check_output
设置shell=True
(感谢slezica!):
s = subprocess.check_output('docker ps', shell=True)
print 'Results of docker ps' + s
如果docker ps
命令失败(例如你没有启动你的docker-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请求。我使用这个库目前使用这个库,它是实时保护程序。