首页 >后端开发 >Golang >为什么我的 Dockerized Go Web 应用程序失败并出现'没有这样的文件或目录”错误?

为什么我的 Dockerized Go Web 应用程序失败并出现'没有这样的文件或目录”错误?

Linda Hamilton
Linda Hamilton原创
2024-12-09 19:53:13919浏览

Why Does My Dockerized Go Web App Fail with a

使用 Go Web App 在 Docker 中执行用户进程时出错

问题

运行 Dockerized Go Web 应用程序时,遇到错误,指示“ standard_init_linux.go:190 中没有这样的文件或目录。

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)

}

Docker File

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn