猿问

qemu-x86_64:无法打开'/lib64/ld-linux-x86-64.so.2':

我在 M1 MacOS 上有一个 Rancher Deskop(dockerd),当我尝试在 dockerfile 下构建时,出现如下错误。这是我尝试构建图像的命令docker build -t te-grafana-dashboards-toolchain --no-cache .


我试图改变平台,但其中的 nonae 对我有用。我对 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


SMILET
浏览 2493回答 4
4回答

临摹微笑

顺便说一句,如果它对其他登陆这里的人有帮助,我在 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 上运行容器时,可能会更快。对于这种情况,我还不能自己尝试。

慕码人8056858

这解决了我的问题。FROM ubuntu:focalRUN apt update; apt install -y curl jq build-essential python3.8 python3-pip docker-compose jsonnet bison mercurialRUN ln -s /usr/bin/python3.8 /usr/bin/pythonRUN 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.gzRUN GO111MODULE="on" go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb@latest; ln -s /root/go/bin/jb /usr/bin/jbWORKDIR /workspace

萧十郎

将以下标志传递给 C 预处理器CPPFLAGS解决了我的 M1 中的类似问题-DPNG_ARM_NEON_OPT=0将值作为带有密钥的 env var 传递CPPFLAGS给相关服务。

烙印99

修改Dockerfile似乎是最流行的答案,但您也可以将DOCKER_DEFAULT_PLATFORM环境变量设置为linux/amd64.export DOCKER_DEFAULT_PLATFORM=linux/amd64原因似乎在于 AArch64 图像。
随时随地看视频慕课网APP

相关分类

Go
我要回答