Heim >Backend-Entwicklung >Golang >Wie behebe ich den „Fehler: Die angegebene Docker-Datei kann nicht gefunden werden' beim Erstellen von Docker-Images aus Go-Code?

Wie behebe ich den „Fehler: Die angegebene Docker-Datei kann nicht gefunden werden' beim Erstellen von Docker-Images aus Go-Code?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-18 18:18:11246Durchsuche

How to Resolve the

Docker-Image aus Go-Code erstellen: „Fehler: Die angegebene Docker-Datei kann nicht gefunden werden“ wird behoben

Beim Versuch, ein Docker-Image mithilfe der Docker-API und der Docker Go-Bibliotheken zu erstellen, Entwickler können gelegentlich auf eine Fehlermeldung stoßen, die besagt: „Fehlerantwort vom Daemon: Die angegebene Docker-Datei konnte nicht gefunden werden.“ Dieser Fehler tritt normalerweise auf, wenn die Docker-API die bereitgestellte Docker-Datei im angegebenen Build-Kontext nicht identifizieren kann.

Um dieses Problem zu beheben, sollten Entwickler die folgenden Schritte in Betracht ziehen:

  • Überprüfen Sie das Vorhandensein und den Pfad der Datei: Stellen Sie sicher, dass die Docker-Datei im angegebenen Build-Kontext vorhanden ist und dass der für das Feld ImageBuildOptions.Dockerfile angegebene Pfad korrekt ist. Es sollten sowohl relative als auch absolute Pfade getestet werden.
  • Symbolische Links vermeiden: Seien Sie vorsichtig bei symbolischen Links innerhalb des angegebenen Pfads. Die Docker-API löst sie möglicherweise nicht richtig auf.
  • Dockerfile und Binärdatei im selben Ordner platzieren: Versuchen Sie zur Fehlerbehebung, die Dockerdatei im selben Ordner wie die Go-Binärdatei abzulegen.
  • RemoteContext in Betracht ziehen: RemoteContext ermöglicht Docker-Dateien, die von externen Ressourcen abhängig sind. Wenn die Docker-Datei das Vorhandensein einer lokalen Datei erfordert, ist dieser Ansatz möglicherweise nicht geeignet.
  • Tar-Kontext als Puffer senden: Verwenden Sie das Feld ImageBuildOptions.Context, um die Docker-Datei als komprimierten TAR-Puffer zu übergeben. Stellen Sie sicher, dass der TAR-Header vor dem Komprimieren ordnungsgemäß geschrieben ist.

Ein Beispiel, von dem berichtet wurde, dass es effektiv funktioniert, besteht darin, einen bytes.Buffer zu erstellen, den Inhalt der Docker-Datei hineinzuschreiben und ihn dann als ImageBuildOptions zu verwenden .Kontext zum Erstellen des Docker-Images. Der unten ausgeschnittene Code veranschaulicht diesen Ansatz:

package main

import (
    "bytes"
    "context"
    "io"
    "io/ioutil"
    "log"
    "os"

    "github.com/docker/docker/api/types"
    "github.com/docker/docker/client"
)

func main() {
    ctx := context.Background()
    cli, err := client.NewEnvClient()
    if err != nil {
        log.Fatal(err, " :unable to init client")
    }

    buf := new(bytes.Buffer)
    tw := tar.NewWriter(buf)
    defer tw.Close()

    dockerFile := "myDockerfile"
    dockerFileReader, err := os.Open("/path/to/dockerfile")
    if err != nil {
        log.Fatal(err, " :unable to open Dockerfile")
    }
    readDockerFile, err := ioutil.ReadAll(dockerFileReader)
    if err != nil {
        log.Fatal(err, " :unable to read dockerfile")
    }

    tarHeader := &tar.Header{
        Name: dockerFile,
        Size: int64(len(readDockerFile)),
    }
    err = tw.WriteHeader(tarHeader)
    if err != nil {
        log.Fatal(err, " :unable to write tar header")
    }
    _, err = tw.Write(readDockerFile)
    if err != nil {
        log.Fatal(err, " :unable to write tar body")
    }
    dockerFileTarReader := bytes.NewReader(buf.Bytes())

    imageBuildResponse, err := cli.ImageBuild(
        ctx,
        dockerFileTarReader,
        types.ImageBuildOptions{
            Context:    dockerFileTarReader,
            Dockerfile: dockerFile,
            Remove:     true})
    if err != nil {
        log.Fatal(err, " :unable to build docker image")
    }
    defer imageBuildResponse.Body.Close()
    _, err = io.Copy(os.Stdout, imageBuildResponse.Body)
    if err != nil {
        log.Fatal(err, " :unable to read image build response")
    }
}

Das obige ist der detaillierte Inhalt vonWie behebe ich den „Fehler: Die angegebene Docker-Datei kann nicht gefunden werden' beim Erstellen von Docker-Images aus Go-Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn