[英]Why can't I execute binary copied into a container?
我有一個從基本圖像alpine:3.11
構建的容器
現在我有一個二進制my_bin
我復制到正在運行的容器中。 從正在運行的容器中,我移至 /usr/local/bin 並確認該二進制文件具有正確的權限。 例如
/ # ls -l /usr/local/bin/my_bin
-rwxr-xr-x 1 root root 55662376 Jun 12 18:52 /usr/local/bin/my_bin
但是當我嘗試執行/運行這個二進制文件時,我得到以下信息:
/ # my_bin init
/bin/sh: my_bin: not found
如果我切換到/usr/local/bin/
並通過./my_bin
運行,情況也是如此
如果我嘗試使用完整路徑
/# /usr/local/bin/my_bin init
/bin/sh: /usr/local/bin/my_bin: not found
為什么我會看到這種行為? 以及如何才能執行二進制文件?
編輯 1我安裝了file
,我還可以確認二進制文件已復制並且是可執行文件
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
也許這提供了一些額外的線索?
編輯 2
正如@BMitch 在答案中所建議的那樣,我也運行了ldd
,這里是 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)
** 編輯 3 **
基於ldd
的 output 和更多谷歌搜索,我發現運行apk add libc6-compat
安裝了缺少的庫,然后我可以運行二進制文件。
/ # my_bin init
/bin/sh: my_bin: not found
當您執行上面的行時,它說找不到您嘗試執行的文件, my_bin是您的情況下的文件。
檢查文件是否正確復制並具有相同的名稱,或者您可能正在嘗試從不同的位置執行文件。
例如,如果您在ls -l /usr/local/bin/my_bin
命令之后沒有執行cd /usr/local/bin
,請嘗試/usr/local/bin/my_bin init
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.