文件更改时,我可以让docker-compose重新启动容器吗?

时间:2019-03-17 16:11:40

标签: docker-compose traefik

Docker-compose很不错-使用docker-composer up -d将重新启动docker-compose.yml已更改的所有容器。但是,如果我更改了其中一个容器在启动时需要读取的traefik.toml,它将无法启动。

重新创建容器时是否可以考虑docker-composer来考虑任意文件?

3 个答案:

答案 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