为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
SMILET 2022-11-08 10:43:47
我在 M1 MacOS 上有一个 Rancher Deskop(dockerd),当我尝试在 dockerfile 下构建时,出现如下错误。这是我尝试构建图像的命令docker build -t te-grafana-dashboards-toolchain --no-cache .我试图改变平台,但其中的 nonae 对我有用。我对 M1 的这个平台问题有点迷茫,但任何帮助将不胜感激,我做错了什么?这可能是什么根本原因?Removing intermediate container 70af516d5d6b ---> a69229847153Step 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 13545862fffeqemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directoryqemu-x86_64: Could not open '/lib64/ld-linux-x86-64.so.2': No such file or directoryRemoving intermediate container 13545862fffeDockerfileFROM --platform=linux/amd64 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-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.gzRUN GO111MODULE="on" go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb; ln -s $(go env GOPATH)/bin/jb /usr/bin/jbWORKDIR /workspace
查看完整描述

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 上运行容器时,可能会更快。对于这种情况,我还不能自己尝试。


查看完整回答
反对 回复 2022-11-08
?
慕码人8056858

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


查看完整回答
反对 回复 2022-11-08
?
萧十郎

TA贡献1815条经验 获得超13个赞

将以下标志传递给 C 预处理器CPPFLAGS解决了我的 M1 中的类似问题

-DPNG_ARM_NEON_OPT=0

将值作为带有密钥的 env var 传递CPPFLAGS给相关服务。


查看完整回答
反对 回复 2022-11-08
?
烙印99

TA贡献1829条经验 获得超13个赞

修改Dockerfile似乎是最流行的答案,但您也可以将DOCKER_DEFAULT_PLATFORM环境变量设置为linux/amd64.

export DOCKER_DEFAULT_PLATFORM=linux/amd64

原因似乎在于 AArch64 图像。


查看完整回答
反对 回复 2022-11-08
  • 4 回答
  • 0 关注
  • 2492 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号