4 回答

TA贡献1982条经验 获得超2个赞
顺便说一句,如果它对其他登陆这里的人有帮助,我在 M1 Max MacBook Pro 笔记本电脑上也遇到了同样的问题,试图docker build
从公司回购中做一个应该是一条很好的路径,但我可能是唯一的一个(它是一家拥有 ARM64 M1“Apple Silicon”Mac 的小公司。但是我发现我的情况的解决方案(嗯,一个解决方案)与 OP 的解决方案完全相反,那就是添加 --platform=linux/amd64
到 docker 文件的 FROM 行。
否则,它会使用 ARM64 映像开始,而我并不聪明,但后来在 Dockerfile 中,构建尝试安装和执行为 x86_64 编译的代码。通过请求基本映像开始构建过程linux/amd64
,然后基本映像具有/lib64/ld-linux-x86-64.so.2
. 这可能意味着一切都在 ARM64 CPU 上被模拟为 x86_64 qemu-x86_64
,因此如果您可以选择从 ARM64 映像开始,并且可以在构建期间在容器内编译任何您无法安装为 ARM64 二进制文件的软件,它会当您稍后在基于 M1 的 Mac 上运行容器时,可能会更快。对于这种情况,我还不能自己尝试。

TA贡献1803条经验 获得超6个赞
这解决了我的问题。
FROM ubuntu:focal
RUN apt update; apt install -y curl jq build-essential python3.8 python3-pip docker-compose jsonnet bison mercurial
RUN ln -s /usr/bin/python3.8 /usr/bin/python
RUN curl -OL https://golang.org/dl/go1.17.linux-arm64.tar.gz; mkdir /etc/golang; tar -xvzf go1.17.linux-arm64.tar.gz -C /etc/golang; ln -s /etc/golang/go/bin/go /usr/bin/go; rm -f go1.17.linux-arm64.tar.gz
RUN GO111MODULE="on" go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest; ln -s /root/go/bin/jb /usr/bin/jb
WORKDIR /workspace

TA贡献1815条经验 获得超13个赞
将以下标志传递给 C 预处理器CPPFLAGS
解决了我的 M1 中的类似问题
-DPNG_ARM_NEON_OPT=0
将值作为带有密钥的 env var 传递CPPFLAGS
给相关服务。

TA贡献1829条经验 获得超13个赞
修改Dockerfile
似乎是最流行的答案,但您也可以将DOCKER_DEFAULT_PLATFORM
环境变量设置为linux/amd64
.
export DOCKER_DEFAULT_PLATFORM=linux/amd64
原因似乎在于 AArch64 图像。
- 4 回答
- 0 关注
- 2492 浏览
添加回答
举报