Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menyelesaikan Ralat 'Tidak dapat mengesan Fail Docker yang ditentukan' Semasa Membina Imej Docker daripada Kod Go?
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:
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") } }
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!