Background
I am using docker to do a school project. Specifically, I pulled an ubuntu image and here is the system config:
I then logged into the docker container (ubuntu) and set up elasticsearch. When I try to run
./bin/elasticsearch
I get the following error inside the docker container's terminal
/lib64/ld-linux-x86-64.so.2: No such file or directory
I have two main confusions:
For the case where it says “ERROR: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory”, ld-linux.so is an ELF dynamic linker or loader that is part of the operating system to load and link the shared libraries needed by the application.
The error “bad ELF interpreter: No such file or directory” usually occurs because we tried to run a 32-bit application on a 64-bit operating system but our OS doesn’t have the support libraries to run 32-bit applications. To solve this problem, we need to download and install the packages that the 64-bit OS needs for running 32-bit applications.
Installing Support Libraries for 32-Bit Applications For the case where it says “ERROR: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory”, ld-linux.so is an ELF dynamic linker or loader that is part of the operating system to load and link the shared libraries needed by the application.
Your problem is a variant of Getting "Not found" message when running a 32-bit binary on a 64-bit system: you have an executable that mentions a dynamic loader that is not there. In your case, the dynamic loader /lib/ld-linux-x86-64.so.2 exists but in a different location /lib64/ld-linux-x86-64.so.2.
If you are running this on an M1 macbook, it's possible that you are running a native Arm image of ubuntu, instead of the emulated x86 image. If the elasticsearch distribution you are trying to install is for x86_64, then it attempts to link to the x86-64-native ld.so, which of course isn't present on different platforms.
Either install the package for the arm platform specifically if they provide one, or - more likely - run docker explicitly as the emulated x86_64 platform:
docker run --platform linux/x86_64 <image>
For docker-compose, add platform: linux/x86_64
according to the docs
services:
my-app:
platform: linux/x86_64
No idea what you are running in your container but for me, the reason was simply because a package (Prisma https://github.com/prisma/prisma/issues/8478#) did not find openssl packages and installing them on alpine
image failed even with openssl
manually installed.
It was fixed by switching to slim
image and installing openssl with apt-get update && apt-get -y install openssl
. I highly recommend not changing your platform since with my M1 the build time increased by 200s using linux/x86_64
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With