docker启动报错:standard_init_linux.go:211: exec user process caused "no such file or directory"

     如题所示,根据自己构建的镜像启动docker容器,直接退出,查看容器日志报错信息,没有任何别的信息。网上搜索这个问题,发现很多人都遇到过,解决办法也各不相同,最后发现一篇文章。受到启发,我的项目是java项目,通过ENTRYPOINT命令启动脚本docker-entrypoint.sh来构建一个在后台运行的服务。而我的docker-entrypoint.sh是在windows下编辑的,自然fileformat是dos,这里需要修改为unix,修改办法也很简答,无需再在linux下操作,我们一般机器上安装了git工具,自带了git bash命令行工具,进入git bash,找到该文件docker-entrypoint.sh,然后使用vi编辑,修改fileformat=unix,如下所示。

    

    修改完成,然后再次构建镜像即可,启动新的镜像,就不会报错了,这个错误一般很难排查。特此记录一下,希望能够帮助到遇到这个错误的人。 

    

已标记关键词 清除标记
<div class="post-text" itemprop="text"> <p>我知道很多人都遇到过这个问题,但没有一个答案解决了我的问题。</p> <h2>工作流</h2> <ul> <li>我在一个Kubernetes集群(GoogleCloud)中运行我的所有dockers。</li> <li>当我在GitHub上的主分支中提交时,我已经设置了编译触发器以自动构建我的dockerfile。</li> <li>然后,我用以下方法更新我的Kubernetes部署: <code>kubectl set image deployment/MYPROJECT MYPROJECT=eu.gcr.io/foo/MYPROJECT:$TRAVIS_COMMIT</code></li> </ul> <h2>哪儿错了?</h2> <p>我的pod停留在 crashloop back-off,日志:<code>standard_init_linux.go:178: exec user process caused "exec format error"</code></p> <h2>一点背景</h2> <p>我的工作流程一直工作到2018年6月,我不知道出了什么问题,所以我根据网上的搜索结果,修改了我的dockerfile,更新了我的依赖项,更改了dockerfile的基本图像版本等等,但还是毫无办法。</p> <h3>Dockerfile</h3> <pre><code>FROM golang:1.10-alpine3.7 AS builder ADD . /go/src/github.com/foo/MYPROJECT WORKDIR /go/src/github.com/foo/MYPROJECT/api RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags "-s -w" -a -installsuffix cgo -o /go/bin/api FROM alpine:3.7 RUN apk --no-cache add ca-certificates COPY --from=builder /go/bin/api /go/bin/api COPY --from=builder /go/src/github.com/foo/MYPROJECT/api/sql /go/migrations/sql COPY --from=builder /go/src/github.com/foo/MYPROJECT/api/.docs/swagger.yml /static/swagger.yml RUN chmod +x /go/bin/api ENTRYPOINT ["/go/bin/api"] </code></pre> <h3>[EDIT: 12 June]</h3> <p>当问题出现时,我注意到docker的图像大小从6.3Mo增加到2.3Mo,我怀疑后面还会有新发现,我会继续研究。</p> </div>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页