Почему скрипт Docker entrypoint не запускается?

#docker #dockerfile

#docker #dockerfile

Вопрос:

Когда я создаю Dockerfile, сборка выполняется успешно, но скрипт entrypoint не запускается. Я также пытался заменить ENTRYPOINT ["scripts/run"] на ENTRYPOINT ["/tmp/files/run"] , но все равно не сработало. Когда я запускаю файл непосредственно из командной строки, выводится «Привет».

Dockerfile

 FROM docker.repo1.uhc.com/confluentinc/cp-kafka-connect:5.5.1
COPY scripts/run /tmp/files/run
RUN chmod  x /tmp/files/run
ENTRYPOINT ["scripts/run"]
  

скрипты / запустить файл

 #!/bin/sh
echo "Hello"
  

Консоль

 Step 1/4 : FROM docker.repo1.uhc.com/confluentinc/cp-kafka-connect:5.5.1
 ---> 8be0645d0a22
Step 2/4 : COPY scripts/run /tmp/files/run
 ---> Using cache
 ---> 5bf0b42480c0
Step 3/4 : RUN chmod  x /tmp/files/run
 ---> Using cache
 ---> 0d5c7b169a48
Step 4/4 : ENTRYPOINT ["scripts/run"]
 ---> Running in 0b2e45be4b75
Removing intermediate container 0b2e45be4b75
 ---> 887bfac238b0
Successfully built 887bfac238b0
  

Как я могу это решить?

Ответ №1:

Обычно в Docker ENTRYPOINT выполняется при запуске контейнера с использованием Docker run <image-name> . Он не будет выполняться при создании образа.

Ответ №2:

Правильная точка входа должна быть

 ENTRYPOINT ["/tmp/files/run"]
  

И некоторые дополнительные примечания:

  • Добавьте расширение файла (в вашем случае .sh )
  • Не используйте /tmp папку. Он предназначен для хранения только временных файлов и будет удален при перезапуске.
  • Скрипты Entrypoint обычно помещаются в / . Поместите его как /entrypoint.sh
  • Не используйте URL-адрес в FROM предложении — . Лучше написать FROM confluentinc/cp-kafka-connect:5.5.1 . Если вы используете зеркало, вы можете настроить его в docker. Посмотрите здесь.

Комментарии:

1. Я пробовал все эти шаги, ни один из них не сработал для меня

2. Вы только создали образ? Вы должны запустить docker build . -t test , а затем docker run test .

3. Теперь он работает с этой командой! Означает ли это, что скрипт entrypoint просто инициализирует контейнер, и для его фактического запуска требуется команда run ?

4. Команды выполняются только для создания образа. Точка входа отмечает первую команду, когда будут запущены изображения.

5. Нет проблем, я рад помочь. Нет, k8s не будет создавать изображения. Если вы куда-то нажмете изображение, k8s вытащит и запустит его.