我在M1 MacOS上有一个Rancher桌面(Dockerd),当我试图在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
发布于 2022-03-25 00:49:26
顺便说一句,如果这对另一个来到这里的人有帮助的话,我在一台M1 Max MacBook Pro笔记本电脑上也会遇到同样的问题,它试图从一家公司回购中拿出一台docker build
,这条路应该走得很远,但我可能是唯一一个拥有ARM64 M1“苹果硅”Mac的公司(这是一家小公司)。然而,发现解决方案(嗯,解决方案)与OP的解决方案正好相反,那就是将 --platform=linux/amd64
添加到停靠文件的FROM行。
否则,它将使用一个ARM64映像来启动,而不是让我更明智,但随后在Dockerfile中,构建尝试安装和执行为x86_64编译的代码。通过请求基本映像be linux/amd64
开始构建过程,最终得到具有/lib64/ld-linux-x86-64.so.2
的基本映像。这可能意味着一切都是通过x86_64在ARM64 CPU上通过qemu-x86_64
进行模拟的,因此如果您可以选择从ARM64映像开始,并且可以在构建期间在容器内编译任何您无法作为ARM64二进制文件安装的软件,那么当您稍后在基于M1的Mac上运行容器时,它可能会运行得更快。我现在还不能为这个案子亲自尝试。
发布于 2022-02-08 21:38:32
这解决了我的问题。
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
发布于 2022-09-06 08:50:43
修改Dockerfile
似乎是最流行的答案,但您也可以将DOCKER_DEFAULT_PLATFORM
环境变量设置为linux/amd64
。
export DOCKER_DEFAULT_PLATFORM=linux/amd64
原因似乎存在于AArch64映像中。
https://stackoverflow.com/questions/71040681
复制相似问题