场景
在将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 版权协议,转载请附上原文出处链接和本声明。