Membina Imej Docker daripada Go Code
Pembangun sering menghadapi cabaran apabila cuba membina imej Docker menggunakan pustaka Docker API dan Go. Artikel ini menangani satu cabaran sedemikian: ketidakupayaan untuk mengesan fail Docker yang ditentukan.
Masalahnya:
Pembangun mungkin menghadapi ralat semasa cuba membina imej Docker menggunakan Fungsi ImageBuild API Docker. Ralat biasanya menyatakan "Tidak dapat mencari Fail Docker yang ditentukan" atau "Respons ralat daripada daemon: Ralat pelayan."
Semakan dan Penyelesaian Masalah:
Untuk menyelesaikan isu, pertimbangkan semakan berikut:
Penyelesaian:
Untuk mengatasi ralat ini, gunakan penyelesaian berikut:
Kod Contoh:
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") } }
Dengan melaksanakan penyelesaian ini, anda boleh berjaya membina Docker imej menggunakan pustaka Docker API dan Go.
Atas ialah kandungan terperinci Mengapa Kod Go Saya Gagal Mencari Fail Docker Semasa Membina Imej Docker?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!