>백엔드 개발 >Golang >내 Dockerized Go 웹 앱이 '해당 파일 또는 디렉터리 없음' 오류와 함께 실패하는 이유는 무엇입니까?

내 Dockerized Go 웹 앱이 '해당 파일 또는 디렉터리 없음' 오류와 함께 실패하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-09 19:53:13847검색

Why Does My Dockerized Go Web App Fail with a

Go 웹 앱을 사용하여 Docker에서 사용자 프로세스를 실행하는 중 오류 발생

문제

Dockerized Go 웹 애플리케이션을 실행할 때 " Standard_init_linux.go:190에 해당 파일이나 디렉터리가 없습니다.

이동 코드

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)

}

Docker 파일

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

원인 및 해결 방법

컴파일된 Go 바이너리에 libc에 대한 종속성이 부족하여 오류가 발생합니다. net을 가져올 때 기본값입니다. 이 문제를 해결하려면 다음 플래그를 사용하여 Go 바이너리를 컴파일하세요.

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

위 내용은 내 Dockerized Go 웹 앱이 '해당 파일 또는 디렉터리 없음' 오류와 함께 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.