#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 вытащит и запустит его.