如何通过SSH有效地从服务器上运行的所有Docker容器中获取信息?

时间:2017-02-17 00:57:16

标签: python python-2.7 docker ssh paramiko

我需要通过SSH获取在远程服务器上运行的所有docker容器的信息。可能有几百个docker容器同时运行。获取所有信息的最有效方法是什么? Rest API不是一个选项。 我需要做的是

ssh root@blah.com 
execute docker container ls 
# get containers info 
for container_id in containers:
    execute docker inspect container_id  

我无法将命令输出写入文件。

  1. 多个SSH连接?我如何用paramiko做到这一点?
  2. 通过一个SSH连接同时运行多个命令?这可以通过paramiko完成吗?

2 个答案:

答案 0 :(得分:0)

您可以使用docker-py

运行Python脚本

它会更快,因为只检查所有容器的过程比为每个容器运行 docker 更好。

PD:当然,可以使用 paramiko 来完成。

答案 1 :(得分:0)

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(Ip, Port, UserName, PassWord)
stdin, stdout, stderr = ssh.exec_command("docker ps | sed -n '2,$p' |awk '{print $1}'")
#docker container id list
conIdList = stdout.readlines()

获取容器ID列表后,可以使用多线程/异步来执行ssh命令docker inspect ContainerID,我认为paramiko可以处理它,但可能很耗时。