Rumah >pembangunan bahagian belakang >Golang >Mengapa Apl Web Dockerized Go Saya Gagal dengan Ralat 'tiada fail atau direktori sedemikian'?

Mengapa Apl Web Dockerized Go Saya Gagal dengan Ralat 'tiada fail atau direktori sedemikian'?

Linda Hamilton
Linda Hamiltonasal
2024-12-09 19:53:13847semak imbas

Why Does My Dockerized Go Web App Fail with a

Ralat dalam Melaksanakan Proses Pengguna dalam Docker dengan Apl Web Go

Isu

Apabila menjalankan aplikasi web Dockerized Go, ralat berlaku yang menunjukkan " tiada fail atau direktori sedemikian" dalam standard_init_linux.go:190.

Kod Go

package main

import (
    "fmt"
    "net/http"
    "os"
)

func hostHandler(w http.ResponseWriter, r *http.Request) {
    name, err := os.Hostname()

    if err != nil {
        panic(err)
    }

    fmt.Fprintf(w, "<h1>HOSTNAME: %s</h1><br>", name)
    fmt.Fprintf(w, "<h1>ENVIRONMENT VARS: </h1><br>")
    fmt.Fprintf(w, "<ul>")

    for _, evar := range os.Environ() {
        fmt.Fprintf(w, "<li>%s</li>", evar)
    }
    fmt.Fprintf(w, "</ul>")

}

func rootHandler(w http.ResponseWriter, r *http.Request) {

    fmt.Fprintf(w, "<h1>Awesome site in Go!</h1><br>")
    fmt.Fprintf(w, "<a href='/host/'>Host info</a><br>")

}

func main() {

    http.HandleFunc("/", rootHandler)
    http.HandleFunc("/host/", hostHandler)
    http.ListenAndServe(":8080", nil)

}

Fail Docker

FROM scratch
WORKDIR /home/ubuntu/go
COPY webapp /
EXPOSE 8080
CMD ["/webapp"]

Punca dan Penyelesaian

Ralat timbul kerana Go yang disusun binari tidak mempunyai pergantungan pada libc, yang dibawa masuk secara dinamik secara lalai apabila mengimport net. Untuk membetulkan ini, susun binari Go dengan bendera berikut:

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w' -o mybin *.go

Atas ialah kandungan terperinci Mengapa Apl Web Dockerized Go Saya Gagal dengan Ralat 'tiada fail atau direktori sedemikian'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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