У меня есть 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 некоторые указатели в сценариях, которые я не написал, кажутся несоответствующими. После двойной проверки структуры файла и отображения переменных все кажется настроенным правильно, и я не могу понять, почему вложенные скрипты не могут найти друг друга.