Добавить проверку в верхней части сценария Entrypoint
Docker действительно необходимо реализовать это в качестве новой функции, но вот еще один вариант обходного пути для ситуаций, в которых у вас есть точка входа, которая заканчивается после успеха или неудачи, что может затруднить отладку.
Если у вас еще нет сценария точки входа, создайте тот, который выполнит все команды, необходимые для вашего контейнера. Затем, в верхней части этого файла, добавьте эти строки в entrypoint.sh
:
# Run once, hold otherwise
if [ -f "already_ran" ]; then
echo "Already ran the Entrypoint once. Holding indefinitely for debugging."
cat
fi
touch already_ran
# Do your main things down here
Чтобы убедиться, что cat
держит соединение, возможно, потребуется предоставить TTY. Я бегу контейнер с моим Entrypoint сценарий следующим образом:
docker run -t --entrypoint entrypoint.sh image_name
Это заставит скрипт запускать один раз, создав файл, который указывает, что уже работать (в виртуальной файловой системе контейнера). Затем вы можете перезапустить контейнер для выполнения отладки:
docker start container_name
При перезапуске контейнера файл already_ran
будет найден, в результате чего сценарий Entrypoint в стойло с cat
(который только ждет навсегда для ввода, который никогда не придет, но держит контейнер в живых). Затем можно выполнить отладку bash
сессии:
docker exec -i container_name bash
В то время как контейнер работает, вы можете также удалить already_ran
и вручную запустить скрипт entrypoint.sh
перезапускать его, если вам нужно отладить таким образом.
Это подразумевает изменение изображения? – nicooga
нет, изображения доступны только для чтения. Он сохраняет измененное состояние контейнера в новое изображение. Test_image – Dmitriusan
Я попытался сделать это с помощью изображения [Docker] (https://github.com/SonarSource/docker-sonarqube/blob/master/6.3.1/Dockerfile) 'sonarqube : 6.3.1 и, к сожалению, это приводит к ошибке **: 'docker: ссылка на разбор ошибок:« entrypoint = sh »не является допустимым репозиторием/тегом: неверный ссылочный формат.« – BigDong