Docker compose 我可以让docker compose在文件更改时重新启动容器吗?
Docker compose很好-使用Docker compose 我可以让docker compose在文件更改时重新启动容器吗?,docker-compose,traefik,Docker Compose,Traefik,Docker compose很好-使用Docker composer up-d将重新启动Docker compose.yml已更改的所有容器。但是,如果我在启动时更改了其中一个容器需要读取的traefik.toml,它将不会恢复 在重新创建容器时,是否可以让docker composer将任意文件考虑在内?不幸的是,docker compose只是一个方便启动容器的工具,它不关心您的状态 为了模仿这样的行为,您可以扩展图像的入口点,并自己处理这样的用例 如果您为有问题的文件设置了一个卷(下面的示
Docker composer up-d
将重新启动Docker compose.yml
已更改的所有容器。但是,如果我在启动时更改了其中一个容器需要读取的traefik.toml
,它将不会恢复
在重新创建容器时,是否可以让docker composer将任意文件考虑在内?不幸的是,docker compose只是一个方便启动容器的工具,它不关心您的状态
为了模仿这样的行为,您可以扩展图像的入口点,并自己处理这样的用例 如果您为有问题的文件设置了一个卷(下面的示例),或者在docker创建卷时在系统上找到该卷,则可以
volumes:
- type: bind
source: .
target: /srv/www
只需设置一个watch
命令或cronjob来检查文件。如果发现更改,您可以简单地cd{builddir}&&docker-compose-down&&docker-compose-up-d
我建议您使用一个脚本来启动watcher和docker compose,或者使用一个别名以便于使用
另一种方法是,您可以让docker容器检查自己的文件,如果它看到更改,只需退出即可。运行cronjob或watch脚本,运行
docker compose up-d
,以响应容器未运行。您可以使用inotifywait跟踪docker compose.yml更改,然后调用docker compose up-d,以便只有配置更改的服务才会重新启动
如果要重新启动traefik容器,则inotifywatch traefik.toml文件和docker compose restart[traefik service name here]。您还可以重建和重新创建服务
以下是我的开发bash脚本的一部分:
#!/usr/bin/env bash
PID=0
trap 'kill $PID' EXIT
if [ -z "$(which inotifywait)" ] ; then
echo "Install inotify-tools"
exit 1
fi
while true; do
sleep 2;
inotifywait -qm --event modify --format '%e' ./docker-compose.yml | echo ""
docker-compose up -d &
done &
PID=$!
docker-compose up
kill $PID
否。扩展容器的入口点并为自己创建这样的逻辑。太糟糕了,但请随意使用作为答案,而不是注释。