Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyelesaikan Ralat 'Tidak dapat mengesan Fail Docker yang ditentukan' Semasa Membina Imej Docker daripada Kod Go?

Bagaimana untuk Menyelesaikan Ralat 'Tidak dapat mengesan Fail Docker yang ditentukan' Semasa Membina Imej Docker daripada Kod Go?

DDD
Lepaskan: 2024-12-25 14:57:16
asal
953 orang telah melayarinya

How to Solve

Bina Imej Docker daripada Kod Go: Menyelesaikan Masalah Laluan Fail Docker

Pengenalan

Membina imej Docker daripada kod Go boleh menjadi tugas biasa bagi pembangun. Walau bagaimanapun, ralat yang berkaitan dengan laluan Dockerfile boleh mencabar untuk ditangani. Artikel ini bertujuan untuk menyediakan penyelesaian kepada isu "Tidak dapat mengesan fail Docker yang ditentukan" apabila menggunakan pustaka Docker API dan Go.

Penyelesaian

Ralat "Tidak dapat mengesan yang ditentukan Dockerfile" biasanya berlaku kerana Docker API tidak dapat mencari Dockerfile dalam laluan yang ditentukan. Untuk menyelesaikannya:

  • Pastikan Ketepatan Laluan Fail: Semak semula laluan ke Fail Docker anda. Ia mestilah laluan mutlak atau relatif daripada direktori kerja semasa.
  • Sediakan Konteks: Sebagai alternatif, anda boleh menyediakan Fail Docker sebagai penimbal tar dan menghantarnya sebagai Konteks dalam ImageBuildOptions. Ini memastikan bahawa Docker API mempunyai akses kepada Dockerfile.

Pengubahsuaian Kod

Berikut ialah contoh pengubahsuaian kod untuk menyediakan Dockerfile sebagai penimbal tar:

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")
    }
}
Salin selepas log masuk

Pengubahsuaian ini membungkus Fail Docker ke dalam penimbal tar dan menetapkannya sebagai Konteks dalam ImageBuildOptions. API Docker kini sepatutnya dapat membina imej dengan jayanya.

Atas ialah kandungan terperinci Bagaimana untuk Menyelesaikan Ralat 'Tidak dapat mengesan Fail Docker yang ditentukan' Semasa Membina Imej Docker daripada Kod Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan