Из вашего резюме не совсем понятно, как работает ваше решение, но при условии, что вы перебираете /executables
и помещаете их в __CallCommand
, возможно, что ваши исполняемые файлы не будут работать на Alpine, если они собраны (связаны)в CentOS.
Я могу создать и запустить воспроизведение вашего кода, но с помощью исполняемых файлов Alpine (busybox) и не пытаться копировать двоичные файлы. Затем я скопировал echo
моего локального дистрибутива, это не получается (как и ожидалось)
Вы можете попробовать запустить исполняемые файлы, скопированные в контейнер:
docker run --interactive --tty --entrypoint ash [[your-image]]`
/ # cd executables/
/executables # ls -l
total 32
-rw-r--r-- 1 root root 0 Apr 1 23:13 1
-rw-r--r-- 1 root root 0 Apr 1 23:13 2
-rwxr-xr-x 1 root root 31464 Apr 1 23:38 echo
/executables # ldd echo
/lib64/ld-linux-x86-64.so.2 (0x7f405d498000)
libc.so.6 => /lib64/ld-linux-x86-64.so.2 (0x7f405d498000)
Error relocating echo: __printf_chk: symbol not found
Error relocating echo: error: symbol not found
Error relocating echo: __fprintf_chk: symbol not found
/executables # ./echo Hello
ash: ./echo: not found
Вам следует:
- использовать не-Alpine
FROM
image - сборка бинарных файлов для Alpine
- установка glibc на Alpine
Дополнительная информация
На Alpine (с использованием собственного |busybox) echo
команда:
ldd /bin/echo
/lib/ld-musl-x86_64.so.1 (0x7ff4f8848000)
libc.musl-x86_64.so.1 => /lib/ld-musl-x86_64.so.1 (0x7ff4f8848000)
Вы видите, что используется musl (Alpine использует эту версию libc)
Мой локальный хост имеет Debian ион использует библиотеку GNU C (glibc
):
ldd /bin/echo
linux-vdso.so.1 (0x00007ffc88ff6000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6933af1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6934098000)
Вы можете увидеть libc.so
ссылки наgnu/libc