如何用Docker Python SDK实现docker container ls获取容器JSON信息
使用Docker Python SDK实现等价
docker container ls --format "{{json .}}"功能 前置依赖
先安装官方维护的Docker Python SDK:pip install docker
核心实现原理
docker container ls 命令默认仅返回运行中的容器,搭配--format "{{json .}}"会输出每个容器的全量元数据JSON结构,SDK的对应逻辑完全对齐原命令行为:
- 用
docker.from_env()初始化客户端时,会自动读取本机Docker的环境变量、套接字配置,和本地命令行docker客户端的连接逻辑完全一致 - 调用
containers.list()方法时不传all=True参数,默认仅返回运行状态的容器,和不带-a的docker container ls行为匹配 - 每个返回的容器对象自带的
attrs属性,就是和命令行JSON输出结构完全一致的Python字典,可直接序列化、提取字段使用
可直接运行的代码示例
import docker import json # 初始化本地Docker客户端连接 client = docker.from_env() # 获取所有运行中容器,等价于执行 docker container ls running_containers = client.containers.list() # 提取每个容器的全量元数据,等价于--format "{{json .}}"的输出结果 container_metadata = [container.attrs for container in running_containers] # 打印单条结果验证结构 for info in container_metadata: print(json.dumps(info, indent=2, ensure_ascii=False))
HTML展示适配建议
你拿到container_metadata的结构化数据后,可直接传入Web服务的模板层渲染,注意几个实践要点:
- 不建议直接把全量元数据输出到前端页面,其中可能包含环境变量、挂载路径、密钥等敏感信息
- 前端展示常用字段可直接从元数据中提取:短ID(取
Id字段前12位)、容器名(取Name字段去掉开头的/)、镜像名(Config.Image)、创建时间(Created)、端口映射(NetworkSettings.Ports)、运行状态(State.Status) - 如果需要做实时刷新效果,可将容器查询逻辑封装为后端接口,前端定时拉取JSON数据局部更新页面即可
常用命令行参数和SDK的对应关系
- 等价
docker container ls -a(查询所有容器,包含停止、异常退出状态):调用client.containers.list(all=True) - 等价
docker container ls --filter条件过滤:给list()方法传入filters字典参数,例如查询所有nginx镜像启动的容器:client.containers.list(filters={"ancestor": "nginx"}) - 连接远程Docker节点:初始化客户端时指定节点地址即可,示例:
docker.DockerClient(base_url="tcp://你的Docker节点IP:2375")
注意:运行脚本的账号需要拥有Docker套接字的访问权限,否则会抛出连接拒绝错误,权限要求和本地直接执行docker命令完全一致。
内容的提问来源于stack exchange,提问作者Urim Suh
相关产品推荐
相关产品推荐

