standard

standard,第1张

场景

在将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重新构建镜像以后就能正常运行了。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/994128.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存