Golang – Docker API – 解析ImagePull的结果
发布时间:2020-12-16 19:03:37 所属栏目:大数据 来源:网络整理
导读:我正在开发一个Go脚本,它使用Docker API来实现我的项目.登录到我的存储库之后,我拉出了我想要的Docker镜像,但问题是 ImagePull函数返回了一个 io.ReadCloser的实例,我只能通过以下方式传递给系统输出: io.Copy(os.Stdout,pullResp) 我可以看到响应很酷,但我
我正在开发一个Go脚本,它使用Docker API来实现我的项目.登录到我的存储库之后,我拉出了我想要的Docker镜像,但问题是
ImagePull函数返回了一个
io.ReadCloser的实例,我只能通过以下方式传递给系统输出:
io.Copy(os.Stdout,pullResp) 我可以看到响应很酷,但我找不到一个合适的方法来解析它并根据它来实现逻辑,如果已经下载了新版本的图像,它会做一些事情,如果是图像是最新的.
@radoslav-stoyanov在使用我的例子之前做的
#docker rmi busybox 然后运行代码 package main import ( "encoding/json" "fmt" "github.com/docker/distribution/context" docker "github.com/docker/engine-api/client" "github.com/docker/engine-api/types" "io" "strings" ) func main() { // DOCKER cli,err := docker.NewClient("unix:///var/run/docker.sock","v1.28",nil,map[string]string{"User-Agent": "engine-api-cli-1.0"}) if err != nil { panic(err) } imageName := "busybox:latest" events,err := cli.ImagePull(context.Background(),imageName,types.ImagePullOptions{}) if err != nil { panic(err) } d := json.NewDecoder(events) type Event struct { Status string `json:"status"` Error string `json:"error"` Progress string `json:"progress"` ProgressDetail struct { Current int `json:"current"` Total int `json:"total"` } `json:"progressDetail"` } var event *Event for { if err := d.Decode(&event); err != nil { if err == io.EOF { break } panic(err) } fmt.Printf("EVENT: %+vn",event) } // Latest event for new image // EVENT: {Status:Status: Downloaded newer image for busybox:latest Error: Progress:[==================================================>] 699.2kB/699.2kB ProgressDetail:{Current:699243 Total:699243}} // Latest event for up-to-date image // EVENT: {Status:Status: Image is up to date for busybox:latest Error: Progress: ProgressDetail:{Current:0 Total:0}} if event != nil { if strings.Contains(event.Status,fmt.Sprintf("Downloaded newer image for %s",imageName)) { // new fmt.Println("new") } if strings.Contains(event.Status,fmt.Sprintf("Image is up to date for %s",imageName)) { // up-to-date fmt.Println("up-to-date") } } } 你可以看到API格式来创建你的结构(比如我的事件),在这里阅读它们https://docs.docker.com/engine/api/v1.27/#operation/ImageCreate 我希望它可以帮助您解决问题,谢谢. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |