standard_init_linux.go:190: exec user process caused “exec format error“异常处理

  • Post author:
  • Post category:linux




场景

在将golang应用打包成docker的镜像的过程中执行下面命令

docker run -it -P --name docker_client -m 1024m --net host docker_client:1.0

执行以后服务器就报了这个错误

standard_init_linux.go:190: exec user process caused "exec format error"

按照网上的方法一直没用,自己在虚拟机上也能正常运行,后面认真看自己的dockerfile文件

FROM golang:alpine

ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=amd64

# 在容器根目录 创建一个 apps 目录
WORKDIR /build

# 拷贝当前目录下 go_docker_demo1 可以执行文件
COPY . .

# 将我们的代码编译成二进制可执行文件app
RUN go build -o app .

# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist

# 将二进制文件从 /build 目录复制到这里
RUN cp /build/app .

# 暴露端口
EXPOSE 8080

# 运行golang程序的命令
CMD ["/dist/app"]

发现

GOARCH

参数为amd64,后面查看服务器的相关版本

 docker version
 #查看docker的版本

输出信息中发现了问题,其中有一行参数为arm64

 OS/Arch:           linux/arm64

于是就将dockerfile文件修改了一下

FROM golang:alpine

ENV GO111MODULE=on \
    GOPROXY=https://goproxy.cn,direct \
    CGO_ENABLED=0 \
    GOOS=linux \
    GOARCH=arm64

# 在容器根目录 创建一个 apps 目录
WORKDIR /build

# 拷贝当前目录下 go_docker_demo1 可以执行文件
COPY . .

# 将我们的代码编译成二进制可执行文件app
RUN go build -o app .

# 移动到用于存放生成的二进制文件的 /dist 目录
WORKDIR /dist

# 将二进制文件从 /build 目录复制到这里
RUN cp /build/app .

# 暴露端口
EXPOSE 8080

# 运行golang程序的命令
CMD ["/dist/app"]

再将dockerfile重新构建镜像以后就能正常运行了。



版权声明:本文为wdxzuishuia原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。