当前位置: 首页 > 面试题库 >

standard_init_linux.go:190:exec用户进程使用go basic Web应用程序导致“无此文件或目录” Docker

太叔高义
2023-03-14
问题内容

在Go中创建了非常基本的Web应用程序

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"]

映像构建成功

ubuntu@ip-172-31-32-125:~/go/src/hello$ docker build -t "webapp" .
Sending build context to Docker daemon  6.152MB
Step 1/5 : FROM scratch
 --->
Step 2/5 : WORKDIR /home/ubuntu/go
 ---> Using cache
 ---> 8810a06c58c7
Step 3/5 : COPY webapp /
 ---> Using cache
 ---> d75222363d3a
Step 4/5 : EXPOSE 8080
 ---> Using cache
 ---> 45de0853de8e
Step 5/5 : CMD ["/webapp"]
 ---> Using cache
 ---> e9f9031f3632
Successfully built e9f9031f3632
Successfully tagged webapp:latest

但是当我运行docker时,它的显示错误。

ubuntu@ip-172-31-32-125:~/go/src/hello$ docker run webapp
standard_init_linux.go:190: exec user process caused "no such file or directory"

请指导问题是什么,我是docker的新手。

与环境有关的信息

ubuntu@ip-172-31-32-125:~/go/src/hello$ ls
Dockerfile  webapp
ubuntu@ip-172-31-32-125:~/go/src/hello$ echo $GOPATH
/home/ubuntu/go

使用 go build webapp.go 命令编译了代码


问题答案:

找不到文件可能意味着文件丢失,脚本缺少解释器或可执行文件缺少库。在这种情况下,默认情况下,net
import引入libc作为动态链接二进制文件。您应该能够ldd在二进制文件上看到它。

要解决此问题,您需要传递一些额外的标志:

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

上面是从:https : //medium.com/@diogok/on-golang-static-
binaries-cross-compiling-and-
plugins-1aed33499671



 类似资料:
  • 问题内容: 在Windows 10上运行docker映像时,出现以下错误: 我的码头工人文件是: 脚本以 #!/ bin / sh* 开头 * 尝试了方法1: 尝试将#!/ bin / sh更改为#!/ bin / bash, 但遇到相同的错误。 尝试过的方法2:在docker文件中添加了dos2unix 问题答案: 使用记事本++,进入编辑-> EOL转换->从CRLF更改为LF。

  • 问题内容: 码头工人开始抛出此错误: standard_init_linux.go:178:exec用户进程导致“ exec格式错误” 每当我运行带有CMD或ENTRYPOINT的特定docker容器时,不考虑文件的任何更改,然后删除CMD或ENTRYPOINT。这是我一直在使用的docker文件,该文件在大约一个小时前运行良好: 问题答案: 我忘了放 在sh文件的顶部,问题已解决。

  • 问题内容: 我正在构建用于python脚本的Dockerfile,它将在下面的minikube Windows 10系统中运行 使用以下命令构建docker 并将其加载到minikube docker demon中 Docker文件 pythoncronjob.yml文件(cron作业文件) 以下是运行此Kubernetes作业的命令 但是获得以下错误作业并不能成功运行,但是当您单独运行Docke

  • 问题内容: 我正在尝试在IntelliJ上运行我的android应用程序。我从现有来源创建了一个项目,并且正确连接了SDK,一切正常,直到在那里,但是当我尝试运行时,它会记录以下消息: 这在我创建的所有类中都会发生。 对可能发生的事情有任何想法吗?也许我必须在IDE中进行一些设置。 谢谢。 问题答案: 解决了!在intelliJ中,转到 “设置” >“编译器”>“ Java编译器”,然后在“ 使用

  • 我正在学习quarkus入门教程,能够生成可执行文件并运行它,但无法运行docker映像。 步骤: > ./mvnw 软件包 -Pnative (它工作) docker build-f src/main/docker/Dockerfile.native-t quokus/get-start.( 泊坞窗运行 -i --rm -p 8080:8080 Quarkus/入门,得到此错误: standar

  • SpringBoot 2.1.0中生成的包结构(如果提取uber jar文件)发生了变化。释放 第1.5.9条。发布jar文件有、、和目录 2.1.0。RELEASE有一个,和目录 基本上从2.0.0开始。RELEASE Forwards-所有类和库都位于目录中。 因此,当您尝试在AmazonLambda上运行SpringBoot项目时,它说没有找到一个jar,因为它无法读取新的SpringBoo