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

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

Linda Hamilton
发布: 2024-12-09 19:53:13
原创
852 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板