运行 Dockerized Go Web 应用程序时,遇到错误,指示“ 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) }
FROM scratch WORKDIR /home/ubuntu/go COPY webapp / EXPOSE 8080 CMD ["/webapp"]
出现错误是因为编译的Go二进制文件缺少对libc的依赖,libc是由导入net时默认。要纠正此问题,请使用以下标志编译 Go 二进制文件:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -tags netgo -ldflags '-w' -o mybin *.go
以上是为什么我的 Dockerized Go Web 应用程序失败并出现'没有这样的文件或目录”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!