从群集中获取正在运行的容器的列表

时间:2017-06-05 04:45:19

标签: amazon-web-services docker containers amazon-ecs

我通过ECS在AWS上运行docker容器。我已经设置了一个具有一些基本配置的集群。

现在我期待得不到。此群集上所有正在运行的容器(分布在2-3个EC2实例中)? AWS / Docker是否为此提供任何API?

我知道在容器实例上,执行docker ps -a将返回所有正在运行/已停止的容器的列表,而docker ps将在一个系统上返回正在运行的容器。但我想要一个API(可以从外部调用)或命令(我可以在集群的任何实例部分上运行),它显示了跨集群运行容器的总数?

2 个答案:

答案 0 :(得分:1)

在ECS中,您正在查看任务。您可以使用ECS API列出所有正在运行的任务。例如,使用aws cli,您可以执行以下操作:

aws ecs list-tasks --cluster <cluster_name>

如果您使用其中一个SDK,例如boto3,则可以轻松获取计数:

import boto3

client = boto3.client('ecs')

tasks = client.list_tasks(cluster='YouCluster')

print(len(tasks['taskArns'])

答案 1 :(得分:0)

我不确定在AWS环境中获取容器信息。但是 Docker在单个服务器或运行集群时非常支持API ,尤其是具有Docker Swarm的集群。

对于使用docker API,您需要在群集中的管理器节点上配置docker守护程序端口(如果群集在docker swarm中运行)或单独配置所有节点并可以访问API

配置docker守护程序端口有 2种方法

1)在 / etc / default / docker文件中配置:

DOCKER_OPTS="-H tcp://127.0.0.1:5000 -H unix:///var/run/docker.sock"

2)在 /etc/docker/daemon.json 配置:

{
"hosts": ["tcp://127.0.0.1:6000", "unix:///var/run/docker.sock"]
}

配置端口后重启docker服务。

如果未配置docker默认套接字(unix:///var/run/docker.sock),则Docker可能未正确配置并等待无限期。

注意:但是,配置文件中没有配置,可能会出现以下错误:

Waiting for /var/run/docker.sock
unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [tcp://127.0.0.1:5000 unix:///var/run/docker.sock], from file: tcp://127.0.0.1:5000)

同时添加 用户端口[tcp://127.0.0.1:5000] 默认docker socket [unix:/ //var/run/docker.sock] 是用户端口允许访问docker API,而默认套接字启用CLI。如果/ etc / default / docker文件中未提及默认端口[unix:///var/run/docker.sock],则可能发生以下错误:

#docker ps
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

此错误不是因为docker未运行,而是因为默认的docker socket未启用。

启用Docker守护程序端口后,您可以使用Docker API 访问运行群集的服务:

  

curl -X GET http://127.0.0.1:6000/services?id=all

各个服务器的API

  

curl -X GET http://127.0.0.1:6000/containers/json?all

有关更多docker API,请参阅here

注意:针对Docker版本17.04和Docker Swarm进行了测试

通过群集中的CLI检查信息:

群集信息:

#docker node ls
ID                           HOSTNAME                STATUS  AVAILABILITY  MANAGER STATUS
7pl9bab4g2yjwctjxq2aax3ud    radisysuser-VirtualBox  Ready   Active        
o45wire6qhu8i5eujl6iyon2p *  labadmin-VirtualBox     Ready   Active        Leader
odwdr5uey085hpb8tnwtj11e0    radisysuser-VirtualBox  Ready   Active        

服务/容器信息:

# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE
sccuf1jgkphn        redis               replicated          3/3                 redis:latest

个人服务信息:

# docker service ps redis
ID                  NAME                IMAGE               NODE                     DESIRED STATE       CURRENT STATE                     ERROR               PORTS
jgix9p141pxt        redis.1             redis:latest        radisysuser-VirtualBox   Running             Running less than a second ago                        
1i4yc8f9cqm5        redis.2             redis:latest        radisysuser-VirtualBox   Running             Running less than a second ago                        
dk1tubki2dg8         \_ redis.2         redis:latest        radisysuser-VirtualBox   Shutdown            Shutdown less than a second ago                       
stpl55l6wwci        redis.3             redis:latest        labadmin-VirtualBox      Running             Running 4 hours ago                                   

希望这会有所帮助。