资讯详情

go-containerregistry 将crane 保存的tar导入docker daemon 中

首先,将镜像从远程仓库提取并保存到指定的指定位置tar,然后load并导入docker daemon

package main  import (  "flag"  "fmt"  "github.com/google/go-containerregistry/pkg/crane"  "github.com/google/go-containerregistry/pkg/name"  v1 "github.com/google/go-containerregistry/pkg/v1"  "github.com/google/go-containerregistry/pkg/v1/daemon"  "os" )  func main() {  var (   srcName string   dstName string  )  flag.StringVar(&srcName, "src", "", "镜像名")  flag.StringVar(&dstName, "dst", "", "镜像名")  flag.Parse()  DownloadImage(srcName, dstName) }  func DownloadImage(srcName, dstName string) {  var (   image v1.Image   err   error  )   //1. Pull image from remote warehouse  image, err = crane.Pull(srcName)  if err != nil {   fmt.Println("crane.Pull function failed, err :", err.Error())   return  }   //2. Gets the hash value of the image  m, err := image.Manifest()  imageFullHash := m.Config.Digest.Hex  fmt.Println("image hash:", imageFullHash)   //3. Create mirrored storage path  Imagestoragedir := "tmp" // the default value is TMP directory  err = os.MkdirAll(Imagestoragedir, 0755)  if err != nil {   fmt.Printf("mkdir %s failed!\n")   return  }  imagePath := Imagestoragedir   "/package.tar"   err = crane.Save(image, "./data", imagePath)  if err != nil {   fmt.Println("crane.Save function failed")   return  }   img2, err := crane.Load(imagePath)  if err != nil {   fmt.Println(" crane.Load function failed err:", err.Error())   return  }  tag3, _ := name.NewTag(dstName)   str, err := daemon.Write(tag3, img2)  if err != nil {   fmt.Println("daemon.Write function failed")   return  } else {   fmt.Println(str)  }  } 

运行结果如下:

# ./crane  -src 192.168.x.x:80/library/goharbor/registry-photon:v2.4.2  -dst registry-photon:test image hash: 62aedd01bd8520c43d06b09f7a0f67ba9720bdc04631a8242c65ea995f3ecac8 {"stream":"Loaded image: registry-photon:test\n"} 

标签: 4083d06pd光电传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台