我通过ECS在AWS上运行docker容器。我已经设置了一个具有一些基本配置的集群。
现在我期待得不到。此群集上所有正在运行的容器(分布在2-3个EC2实例中)? AWS / Docker是否为此提供任何API?
我知道在容器实例上,执行docker ps -a
将返回所有正在运行/已停止的容器的列表,而docker ps
将在一个系统上返回正在运行的容器。但我想要一个API(可以从外部调用)或命令(我可以在集群的任何实例部分上运行),它显示了跨集群运行容器的总数?
答案 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
希望这会有所帮助。