我有一个在容器中的java映像上运行的spring-boot应用程序。在Dockerfile中我正在复制jar文件。然后为我的项目构建自定义图像并运行它
我在想如果我将容量映射我的jar文件。至少它会第一次运行。我想要一些功能,比如当我在主机中更改体积映射文件时,需要重新运行docker。
对于HTML,nginx可以正常工作,因为它只是在特定文件夹中呈现html文件而无需重新运行。但是,我怀疑它是否适用于java
要自动重新运行什么是命令。它会自动发生吗?
您需要做的是使用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