Как обернуть исполняемый файл в Docker? - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть исполняемый двоичный файл с именем 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

Это ставит меня в тупик по двум причинам:

  1. почему sh работает, несмотря на установку точки входа на /abin?
  2. , почему /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"]

1 Ответ

0 голосов
/ 26 ноября 2018

Если ваша точка входа не в квадратных скобках, Docker вызовет sh <entrypoint>.Вместо этого используйте ENTRYPOINT ["abin"], и я считаю, что это должно сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...