#docker #docker-volume
#docker #docker-volume
Вопрос:
У меня есть приложение с весенней загрузкой, работающее на изображениях Java в контейнере. В Dockerfile я копирую jar-файл. Затем создайте пользовательский образ для моего проекта и запустите его
Я думаю, что, если я сопоставлю объем с моим файлом jar. По крайней мере, он будет запущен в первый раз. Мне нужна некоторая функциональность, например, при изменении файла карты томов на моем главном компьютере docker необходимо перезапустить.
Для HTML nginx будет работать нормально, поскольку он просто отображает html-файлы в определенной папке без повторного запуска. Но я сомневаюсь, что это будет работать для java
Для автоматического повторного запуска каковы команды. Произойдет ли это автоматически?
Ответ №1:
Что вам нужно сделать, так это контролировать свой файл с помощью inotify, и всякий раз, когда этот файл изменяется, вызывать Docker API, чтобы он сбрасывал контейнер.
Чтобы вызвать Docker API изнутри контейнера, вы монтируете сокет Docker внутри контейнера следующим образом:
docker container run -it -v /var/run/docker.sock:/var/run/docker.sock ubuntu
Затем вы устанавливаете необходимые утилиты внутри контейнера:
apt-get update; apt-get install -y curl inotify-tools
Затем вы пишете скрипт, который должен вызываться при изменении вашего целевого файла:
echo "curl --unix-socket /var/run/docker.sock -X POST http:/v1.24/containers/<container_to_reset>/restart" > script
chmod x ./script # Make sure the script is executable
Наконец, вы запускаете цикл, который выполняет ваш скрипт всякий раз, когда изменяется целевой файл:
while inotifywait -e close_write <target_file>; do ./script; done
Комментарии:
1. Я этого не знаю. содержимое файла sock. Итак, я попытаюсь вернуться