当卷映射数据发生更改时,docker会自动重新运行

问题描述 投票:1回答:1

我有一个在容器中的java映像上运行的spring-boot应用程序。在Dockerfile中我正在复制jar文件。然后为我的项目构建自定义图像并运行它

我在想如果我将容量映射我的jar文件。至少它会第一次运行。我想要一些功能,比如当我在主机中更改体积映射文件时,需要重新运行docker。

对于HTML,nginx可以正常工作,因为它只是在特定文件夹中呈现html文件而无需重新运行。但是,我怀疑它是否适用于java

要自动重新运行什么是命令。它会自动发生吗?

docker docker-volume
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.