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