Heim > Backend-Entwicklung > Golang > Wie behebt man den Fehler „Angegebene Docker-Datei kann nicht gefunden werden' beim Erstellen von Docker-Images aus Go?

Wie behebt man den Fehler „Angegebene Docker-Datei kann nicht gefunden werden' beim Erstellen von Docker-Images aus Go?

Mary-Kate Olsen
Freigeben: 2024-12-15 19:21:10
Original
238 Leute haben es durchsucht

How to Fix

Erstellen von Docker-Images aus Go-Code: Beheben eines Dockerfile-Speicherortfehlers

Beim Versuch, Docker-Images mithilfe der Docker-API und der Docker Go-Bibliotheken zu erstellen, Es kommt häufig vor, dass ein Fehler im Zusammenhang mit dem Speicherort der angegebenen Docker-Datei auftritt. Die Fehlermeldung „Fehlerantwort vom Daemon: Die angegebene Docker-Datei kann nicht gefunden werden“ weist darauf hin, dass der angegebene Pfad zur Docker-Datei falsch ist oder die Docker-Datei nicht gefunden werden kann.

Lösung:

Um dieses Problem zu beheben, überprüfen Sie Folgendes:

  1. Stellen Sie sicher, dass der Ordner mit der Docker-Datei im Build vorhanden ist Pfad.
  2. Überprüfen Sie den Pfad zur Docker-Datei. Verwenden Sie einen relativen oder absoluten Pfad, der direkt auf die Docker-Datei verweist.
  3. Vermeiden Sie die Verwendung von Softlinks im Pfad zur Docker-Datei.
  4. Testen Sie, ob die Docker-Datei mit dem Standard-Docker-Build erstellt werden kann Befehl.

Wenn alle oben genannten Schritte ausgeführt wurden und der Fehler weiterhin besteht, versuchen Sie Folgendes Ansatz:

  1. Verwenden Sie einen TAR-Puffer, um den Dockerfile-Inhalt für die ImageBuild-Funktion bereitzustellen.
  2. Erstellen Sie ein TAR-Archiv der Dockerdatei.
  3. Übergeben Sie das TAR-Archiv als einen io.Reader für das Kontextfeld der ImageBuildOptions-Struktur.
  4. Geben Sie den Namen der Docker-Datei als an Dockerfile-Feld in der ImageBuildOptions-Struktur.

Beispielcode:

package main

import (
    "archive/tar"
    "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")
    }
}
Nach dem Login kopieren

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

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage