docker - 使用Docker SDK从文件加载图像

标签 docker go

我使用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.tar
open /var/lib/docker/tmp/docker-import-075289246/repositories: no such file or directory

那么,为什么在SDK的情况下我没有错误?

最佳答案

我为我添加了工作示例:

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 command

关于docker - 使用Docker SDK从文件加载图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60277633/

相关文章:

docker compose 网络别名不起作用

使用bson的golang结构默认值

Google oauth2 端点不返回用户个人资料信息(姓名等)

string - 在 golang tcp 服务器中修剪换行符

c++ - Docker容器中的FFmpeg未捕获帧

带有 Docker 容器的 Azure

postgresql - Quarkus 原生镜像 : postgresql connection refused

django - 看不到正在本地主机上的 docker 容器中运行的 django 站点

string - 字符串的零是多少?

windows - 如何解析文件路径中的用户环境变量