Использование Docker SDK для загрузки изображения из файла - PullRequest
0 голосов
/ 18 февраля 2020

Я использую функцию 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?

1 Ответ

1 голос
/ 18 февраля 2020

Я добавил рабочий пример для меня:

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 команда

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...