Build Docker Image von Go Code

Ich versuche, ein Docker-Image mit der Docker-API und den Docker Go-Bibliotheken zu erstellen https: //github.com/docker/engine-api). Code-Beispiel:

package main
import (
    "fmt"
    "github.com/docker/engine-api/client"
    "github.com/docker/engine-api/types"
    "golang.org/x/net/context"
)
func main() {
    defaultHeaders := map[string]string{"User-Agent": "engine-api-cli-1.0"}
    cli, err := client.NewClient("unix:///var/run/docker.sock", "v1.22", nil, defaultHeaders)
    if err != nil {
        panic(err)
    }
    fmt.Print(cli.ClientVersion())
    opt := types.ImageBuildOptions{
        CPUSetCPUs:   "2",
        CPUSetMems:   "12",
        CPUShares:    20,
        CPUQuota:     10,
        CPUPeriod:    30,
        Memory:       256,
        MemorySwap:   512,
        ShmSize:      10,
        CgroupParent: "cgroup_parent",
        Dockerfile:   "dockerSrc/docker-debug-container/Dockerfile",
    }
    _, err = cli.ImageBuild(context.Background(), nil, opt)
    if err == nil || err.Error() != "Error response from daemon: Server error" {
        fmt.Printf("expected a Server Error, got %v", err)
    }
}

Der Fehler ist immer gleich:

Fehlerantwort vom Dämon: Angegebene Docker-Datei kann nicht gefunden werden: dockerSrc / docker-debug-container / Dockerfile

ode

Fehlerantwort vom Dämon: Angegebene Docker-Datei kann nicht gefunden werden: Docker-Datei

Dinge, die ich überprüft habe:

Der Ordner existiert im Erstellungspfad Ich habe versucht, sowohl relative als auch absolute PfadDer Pfad enthält keine Softlinks Ich habe versucht, den gleichen Ordner für Binär undDockerfiledocker build <path> worksund ein paar andere Sachen

Meine andere Option war die Verwendung vonRemoteContext was so aussieht, als würde es funktionieren, aber nur für vollständig in sich geschlossene Dockerdateien und nicht für solche mit "lokaler Dateianwesenheit".

Aktualisieren Versucht vorbeitar als Puffer, aber mit folgendem Ergebnis:

  dockerBuildContext, err := os.Open("<path to>/docker-debug-    container/docker-debug-container.tar")
  defer dockerBuildContext.Close()

    opt := types.ImageBuildOptions{
        Context:      dockerBuildContext,
        CPUSetCPUs:   "2",
        CPUSetMems:   "12",
        CPUShares:    20,
        CPUQuota:     10,
        CPUPeriod:    30,
        Memory:       256,
        MemorySwap:   512,
        ShmSize:      10,
        CgroupParent: "cgroup_parent",
        //  Dockerfile:   "Dockerfile",
    }

    _, err = cli.ImageBuild(context.Background(), nil, opt)

Antworten auf die Frage(10)

Ihre Antwort auf die Frage