从arm32v7 golang镜像构建docker镜像时exec格式错误

时间:2020-08-12 16:19:08

标签: linux docker go arm alpine

我正在尝试从arm32v7/golang:1.13.4-alpine构建一个从Mac成功构建的docker映像,但是当我尝试在linux机器上构建它时,它会抛出一个exec format errorexec format error上有很多问题,但找不到任何解决方案。 我的docker文件如下所示

FROM arm32v7/golang:1.13.4-alpine as staging

RUN .....
RUN .....
RUN tar -czvf sbuild.tar.gz ./servicebuild
......
......
CMD tar -xzvf sbuild.tar.gz && ./servicebuild

它基本上在docker文件中的第一个命令失败并抛出错误 standard_init_linux.go:211: exec user process caused "exec format error"

构建机器的体系结构 Linux x86_64 x86_64 x86_64 GNU/Linux

上述体系结构不支持arm32v7吗?我还有其他方法可以做到吗?

2 个答案:

答案 0 :(得分:0)

这是因为Docker for Mac支持多CPU架构:https://docs.docker.com/docker-for-mac/multi-arch/

据我所知,在使用本机Docker的Linux上,您没有这个功能。尽管您可以通过安装其他软件来做到这一点。例如,查看此帖子:https://medium.com/@artur.klauser/building-multi-architecture-docker-images-with-buildx-27d80f7e2408

答案 1 :(得分:0)

您需要通过QEMU和binfmt_misc启用不同的多体系结构容器执行。

在最近的发行版中,只需运行以下命令即可完成

apt-get install qemu-user-static

如果这对您不起作用,则可以执行:

docker run --rm --privileged multiarch/qemu-user-static --reset --persistent yes --credential yes

请注意,这可能会重新配置您现有的任何binfmt_misc设置。有关更多详细信息,请参见https://github.com/multiarch/qemu-user-static

据我所知,此信息可在一个高山存储库自述文件中找到,而在维基百科上则没有:https://gitlab.alpinelinux.org/alpine/docker-abuild#configure-multi-arch-support

相关问题