go语言操作docker删除所有停止的容器
逻辑是通过过滤器,过滤掉,状态为exited的容器,然后再遍历删除
代码部分
package main
import (
"context"
"fmt"
"os"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client"
)
func main() {
// 设置远程Docker守护进程的地址
remoteDockerURL := "tcp://10.0.0.12:2376" // 将remote-docker-host替换为远程Docker守护进程的IP地址或域名
// 创建Docker客户端,并指定远程Docker守护进程地址
cli, err := client.NewClientWithOpts(
client.WithHost(remoteDockerURL),
// client.WithVersion("1.41"),
client.WithAPIVersionNegotiation(),
)
if err != nil {
fmt.Println("创建docker客户端失败:", err)
os.Exit(1)
}
// 创建一个过滤器,用于获取只停止的容器
filterArgs := filters.NewArgs()
filterArgs.Add("status", "exited")
// 获取只停止的容器
containers, err := cli.ContainerList(context.Background(), types.ContainerListOptions{
All: true, // 设置为true以包括停止的容器,false只列出正在运行的容器
Filters: filterArgs, // 使用过滤器获取只停止的容器
})
if err != nil {
fmt.Println("获取容器列表失败:", err)
return
}
// 删除所有停止的容器
for _, container := range containers {
err := cli.ContainerRemove(context.Background(), container.ID, types.ContainerRemoveOptions{
RemoveVolumes: true, // 如果容器使用了卷,同时删除关联的卷
Force: true, // 强制删除,即使容器在运行时也删除
})
if err != nil {
fmt.Println("删除容器失败:", err)
} else {
fmt.Printf("成功删除容器 %s\n", container.Names[0])
}
}
// 关闭Docker客户端连接
defer cli.Close()
}
本文来自博客园,作者:厚礼蝎,转载请注明原文链接:https://www.cnblogs.com/guangdelw/p/17565533.html