简体   繁体   中英

Why can't I execute binary copied into a container?

I have a container built from base image alpine:3.11

Now I have a binary my_bin that I copied into the running container. From within the running container I moved to /usr/local/bin and I confirmed that the binary is there with the right permissions. Eg

/ # ls -l /usr/local/bin/my_bin
-rwxr-xr-x    1 root     root      55662376 Jun 12 18:52 /usr/local/bin/my_bin

But when I attempt to execute/run this binary I get the following:

/ # my_bin init
/bin/sh: my_bin: not found

This is also the case if I switch into /usr/local/bin/ and run via ./my_bin

also if I try using the full path

/# /usr/local/bin/my_bin init
/bin/sh: /usr/local/bin/my_bin: not found

Why am I seeing this behavior? and how do I get to be able to execute the binary?

EDIT 1 I installed file and I can also confirm that the binary is copied and is an executable

file /usr/local/bin/my_bin 
/usr/local/bin/my_bin: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=b36f0aad307c3229850d8db8c52e00033eae900c, for GNU/Linux 3.2.0, not stripped

Maybe this gives some extra clues?

Edit 2

As suggested by @BMitch in the answer I also ran ldd and here is the output

# ldd /usr/local/bin/my_bin 
    /lib64/ld-linux-x86-64.so.2 (0x7f91a79f3000)
    libpthread.so.0 => /lib64/ld-linux-x86-64.so.2 (0x7f91a79f3000)
    libdl.so.2 => /lib64/ld-linux-x86-64.so.2 (0x7f91a79f3000)
    libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f91a79f3000)

** Edit 3 **

Based on the output of ldd and more googling, I find that running apk add libc6-compat installed the missing libraries and I could then run the binary.

For a binary, this most likely indicates a missing dynamic library. You can run ldd /usr/local/bin/my_bin to see all the libraries that binary uses. With alpine, the most common library to be missing from an externally compiled program is libc. Alpine is built with musl instead of libc, and therefore you'll want to compile programs specifically for Alpine.

For others that may encounter this error in docker containers, I cover various issues in my faq presentation and other questions on the site .

 / # my_bin init
/bin/sh: my_bin: not found

When you execute above line it says file which you are trying to execute can't be found, my_bin is the file in your case.

Check if file is copied properly and with the same name or you might be trying to execute file from different location.

eg Try /usr/local/bin/my_bin init if you are not doing cd /usr/local/bin after ls -l /usr/local/bin/my_bin command.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM