为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Docker SDK 从文件加载图像

使用 Docker SDK 从文件加载图像

Go
弑天下 2022-05-18 13:44:18
我使用 ImageLoad 函数来加载图像:    file, err := os.OpenFile(fileName, os.O_RDONLY, 0666)    if err != nil {        log.Debugf("Error loading image %s, %s", fileName, err)    } else {        defer file.Close()        resp, err := client.api.ImageLoad(ctx, file, false)        if err != nil {            log.Debugf("Error loading image %s, %s", fileName, err)        }        if resp.Body == nil {            err = errors.New("Error loading image")        } else {            defer resp.Body.Close()        }    }但是如果我加载一个不是图像的文件,我没有错误。如果我使用控制台,它会按预期工作:$ docker load -i s.taropen /var/lib/docker/tmp/docker-import-075289246/repositories: no such file or directory那么,为什么我在 SDK 的情况下没有错误?
查看完整描述

1 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

我为我添加了工作示例:


package main


import (

    "bytes"

    "fmt"

    "io/ioutil"

    "log"


    "github.com/docker/docker/client"

    "golang.org/x/net/context"

)


func main() {

    cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())

    if err != nil {

        panic(err)

    }

    input := bytes.NewReader([]byte("dummy content\n"))

    imageLoadResponse, err := cli.ImageLoad(context.Background(), input, true)

    if err != nil {

        log.Fatal(err)

    }

    body, err := ioutil.ReadAll(imageLoadResponse.Body)

    fmt.Println(string(body))

}

//Output:

// {"errorDetail":{"message":"Error processing tar file(exit status 1): unexpected EOF"},"error":"Error processing tar file(exit status 1): unexpected EOF"}


您还可以查看docker load 命令的方式


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信