更改体积图数据时docker自动重新运行

时间:2019-04-07 05:12:27

标签: docker docker-volume

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

我正在考虑如果要对jar文件进行体积映射。至少它将第一次运行。 我想要一些功能,例如在主机上更改卷映射文件时,需要重新运行docker。

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

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

1 个答案:

答案 0 :(得分: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