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

否。扩展容器的入口点并为自己创建这样的逻辑。太糟糕了,但请随意使用作为答案,而不是注释。