Docker-compose很不错-使用docker-composer up -d
将重新启动docker-compose.yml
已更改的所有容器。但是,如果我更改了其中一个容器在启动时需要读取的traefik.toml
,它将无法启动。
重新创建容器时是否可以考虑docker-composer
来考虑任意文件?
答案 0 :(得分:0)
不幸的是,不,Docker-compose只是用来简化启动容器的便捷工具,它并不关心您的状态。
要模仿此类行为,您可以扩展图像的入口点并自己处理此类用例。
答案 1 :(得分:0)
如果您为有问题的文件设置了一个卷(例如以下示例),或者在Docker创建卷时在系统上找到了该卷。
volumes:
- type: bind
source: .
target: /srv/www
只需设置一个watch
命令或cronjob来检查文件。如果找到更改,则只需cd {build dir} && docker-compose down && docker-compose up -d
我建议您有一个启动观察程序和docker-compose的脚本或一个别名,以便于使用。
另一种方法是,您可以让docker容器检查自己的文件,如果它只看到exit
的更改,则可以。运行cronjob或watch脚本,以响应容器未运行而运行docker-compose up -d
。
答案 2 :(得分:0)
您可以使用inotifywait来跟踪 docker-compose.yml 的更改,然后调用 docker-compose up -d ,这样只有配置更改的服务才会重新启动。
如果您想重新启动traefik容器,请inotifywatch traefik.toml文件,然后docker-compose重新启动[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