背景
我正在使用 docker 来做一个学校项目。具体来说,我提取了 ubuntu 映像,这是系统配置:
然后我登录到 docker 容器(ubuntu)并设置elasticsearch。当我尝试跑步时
./bin/elasticsearch
我在 docker 容器的终端中收到以下错误
/lib64/ld-linux-x86-64.so.2: No such file or directory
我有两个主要的困惑:
如果您在 M1 MacBook 上运行此程序,则您可能正在运行 ubuntu 的本机 Arm 映像,而不是模拟的 x86 映像。如果您尝试安装的elasticsearch发行版适用于x86_64,那么它会尝试链接到x86-64-native ld.so,这当然不存在于不同的平台上。
如果他们提供了专门针对arm平台的软件包,或者 - 更有可能 - 明确运行docker作为模拟的x86_64平台:
docker run --platform linux/x86_64 <image>
不知道你在容器中运行什么,但对我来说,原因很简单,因为包(Prisma https://github.com/prisma/prisma/issues/8478#)没有找到 openssl 包并安装它们即使手动安装了
alpine
,openssl
图像也失败。
通过切换到
slim
图像并使用 apt-get update && apt-get -y install openssl
安装 openssl 来修复此问题。我强烈建议不要更改您的平台,因为使用我的 M1,构建时间增加了 200 秒,使用linux/x86_64
。
完成@misnomer 的回答,我什至无法构建图像。 如果是这种情况,只需添加来自
此来源的
FROM --platform=linux/x86_64 ...
。例如:FROM --platform=linux/x86_64 python:slim ...
在这种情况下,我使用
alpine:latest
而不是 ubuntu。
对我有用的是将
libc6-compat
添加到我的 Dockerfile 中:
RUN apk add libc6-compat
Alpine 使用 musl,它是 “从头开始设计用于静态链接”。 但是
/lib64/ld-linux-x86-64.so.2
是来自gcc/glibc的动态链接库。
现在我的应用程序在我的 Apple Silicon Mac 上的 alpine 中运行良好,没有出现
rosetta error: failed to open elf at /lib64/ld-linux-x86-64.so.2
错误