docker автоматически перезапускается при изменении данных карты объема

#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. Итак, я попытаюсь вернуться