Golang Docker SDK ImageList All参数失效?

在使用Golang Docker SDK的ImageList方法获取镜像列表时,即使将All参数设置为true,仍然只会显示不同镜像ID的镜像,而无法像docker images命令那样显示所有镜像,包括那些具有相同镜像ID的镜像。

原因:

  • docker images命令直接查询Docker引擎的镜像存储库,获取所有镜像信息,包括中间层镜像和被标记为删除的镜像。* ImageList方法默认情况下(All=false)只返回未被标记为删除的顶层镜像,即使将All设置为true,也只是返回所有未被删除的镜像,包括中间层镜像。 * Docker引擎为了优化存储空间,会共享相同的镜像层,导致多个镜像可能拥有相同的镜像ID。

解决方案:

为了获取所有镜像信息,包括相同镜像ID的镜像,可以结合使用All参数和Filters参数:goimport ( 'context' 'fmt' 'github.com/docker/docker/api/types' 'github.com/docker/docker/api/types/filters' 'github.com/docker/docker/client')

func main() { cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) if err != nil { panic(err) }

    // 设置过滤器,不过滤任何镜像        imageFilters := filters.NewArgs()

    options := types.ImageListOptions{                All:     true,                Filters: imageFilters,        }

    images, err := cli.ImageList(context.Background(), options)        if err != nil {                panic(err)        }

    for _, image := range images {                fmt.Println(image.ID)        }}

注意:

  • 使用ImageList方法获取的镜像列表中可能包含大量镜像,包括中间层镜像,这会消耗更多内存和网络资源。* 如果只想获取特定类型的镜像,可以使用Filters参数进行过滤,例如: filters.Add('dangling', 'true') 获取悬空镜像。

希望本文能帮助你理解ImageList方法与docker images命令的区别,并在使用Golang Docker SDK时获取所需的镜像信息。

Golang Docker SDK ImageList All参数为true却无法显示所有镜像?

原文地址: https://www.cveoy.top/t/topic/fwu5 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录