У меня есть исполняемый двоичный файл с именем abin
, который я хочу в контейнере.Все, что делает abin
, это выводит тестовую строку через printf
.Поэтому я создаю каталог с именем test
, который содержит только abin
и следующие Dockerfile
:
from alpine:3.7
copy abin /
entrypoint /abin
Итак, я sudo docker build -t test/testy:tag . && sudo docker run --rm test/testy:tag
и получаю следующее:
/bin/sh: /abin: not found
Это ставит меня в тупик по двум причинам:
- почему
sh
работает, несмотря на установку точки входа на /abin
? - , почему
/abin
не найден?
Изменение точки входа на stat /abin
с последующим перестроением и повторным запуском дает ожидаемый вывод stat
, ясно указывающий на наличие исполняемого файла на /abin
.Точно так же, удалив точку входа и запустив ее в интерактивной оболочке контейнера, я вижу файл abin
и могу ls
или stat
и cat
и т. Д., Но ./abin
или /abin
все равно выдает ошибку /bin/sh: ./abin: not found
.
РЕДАКТИРОВАТЬ:
Я неправильно предположил, что Alpine запускает тот же тип двоичных файлов, что и большинство linux. Не так .Кроме того, это даже не идет с stdio - моя вторая ошибка.Наконец, мне нужно было указать точку входа как абсолютный путь.Таким образом работает следующий Dockerfile:
from alpine:3.7
workdir /
copy test.c .
run apk add gcc libc-dev && gcc test.c -o abin
entrypoint ["/abin"]