Вложенные сценарии не могут найти друг друга в изображении Docker - PullRequest
0 голосов
/ 04 октября 2019

У меня есть Dockerfile как таковой:

FROM alpine:3.7
COPY confluent-5.3.0 confluent-5.3.0
COPY startup.sh startup.sh
COPY start-connector.sh start-connector.sh
RUN chmod +x startup.sh
RUN chmod +x start-connector.sh
RUN chmod +x confluent-5.3.0/bin/connect-standalone
EXPOSE 8083:8083
RUN apk --no-cache add curl
ENTRYPOINT ["./startup.sh"]

Точка входа запускает мой скрипт запуска (из которого при запуске в Linux он работает как положено), однако, когда я запускаю свой образ, я получаю следующееошибка:

./root/start-connector.sh: line 3: ./root/confluent-5.3.0/bin/connect-standalone: Permission denied

Поэтому я делаю этот сценарий возможным, добавив в свой Dockerfile следующее:

RUN chmod +x confluent-5.3.0/bin/kafka-run-class

После перекомпоновки и запускаТеперь я получаю эту ошибку:

./confluent-5.3.0/bin/connect-standalone: exec: line 75: ./confluent-5.3.0/bin/kafka-run-class: not found

Таким образом, файл существует и является исполняемым, но после копирования структуры вложенных папок в образ некоторые вложенные сценарии ломаются. Я проверил контейнер и подтвердил, что все файлы были скопированы надлежащим образом. Обратите внимание, что connect-standalone и kafka-run-class находятся в одном каталоге.

Конкретная строка, которая заканчивается в приведенном выше фрагменте кода, находится здесь:

echo "$(dirname $0)"
exec $(dirname $0)/kafka-run-class

Где выводится dirname ./confluent-5.3.0/bin

Итак, мой скрипт работает при запуске наLinux. Но после создания моего образа Docker некоторые указатели в сценариях, которые я не написал, кажутся несоответствующими. После двойной проверки структуры файла и отображения переменных все кажется настроенным правильно, и я не могу понять, почему вложенные скрипты не могут найти друг друга.

1 Ответ

0 голосов
/ 09 октября 2019

Итак, вложенные скрипты работали с bash, который не был предварительно установлен на Alpine. В случае, если кто-то еще сталкивается с этой проблемой, просто добавьте bash в ваш Dockerfile:

RUN apk --no-cache add bash

или используйте что-то отличное от Alpine.

...