我在 M1 MacOS 上有一个 Rancher Desktop(docker),当我尝试在 dockerfile 下构建时,我收到如下错误。这是我尝试构建图像的命令docker build -t te-grafana-dashboards-toolchain --no-cache .
我尝试更换平台,但其中一些对我有用。我对 M1 的这个平台问题有点迷失,但任何帮助将不胜感激,我做错了什么?造成这种情况的根本原因可能是什么?
Removing intermediate container 70af516d5d6b
---> a69229847153
Step 5/6 : RUN GO111MODULE="on" go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb; ln -s $(go env GOPATH)/bin/jb /usr/bin/jb
---> Running in 13545862fffe
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
qemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directory
Removing intermediate container 13545862fffe
Dockerfile
FROM --platform=linux/amd64 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-amd64.tar.gz; mkdir /etc/golang; tar -xvzf go1.17.linux-amd64.tar.gz -C /etc/golang; ln -s /etc/golang/go/bin/go /usr/bin/go; rm -f go1.17.linux-amd64.tar.gz
RUN GO111MODULE="on" go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb; ln -s $(go env GOPATH)/bin/jb /usr/bin/jb
WORKDIR /workspace
顺便说一句,如果这对来到这里的其他人有帮助,我在尝试执行以下操作的 M1 Max MacBook Pro 笔记本电脑上遇到了同样的问题docker build
来自公司仓库,这应该是一条相当不错的道路,但我可能是唯一一个拥有 ARM64 M1“Apple Silicon”Mac 的人(这是一家小公司)。然而我发现我的情况的解决方案(好吧,一个解决方案)与OP的解决方案完全相反,那就是添加 --platform=linux/amd64
到 docker 文件的 FROM 行。
Example:
FROM --platform=linux/amd64 ubuntu:20.04
否则,它会使用 ARM64 映像开始,而我并不知道,但后来在 Dockerfile 中,构建尝试安装并执行为 x86_64 编译的代码。通过请求基础镜像来启动构建过程linux/amd64
最终基础图像具有/lib64/ld-linux-x86-64.so.2
。这可能意味着一切都被模拟为 ARM64 CPU 上的 x86_64qemu-x86_64
因此,如果您可以选择从 ARM64 映像启动,并且可以在构建期间在容器内编译任何无法安装为 ARM64 二进制文件的软件,那么当您稍后在基于 M1 的 Mac 上运行容器时,速度可能会更快。对于这种情况,我自己还无法尝试。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)