首页 > 解决方案 > Docker-compose 运行服务以防其他故障

问题描述

我想问一下是否可以在出现故障时运行一些备份服务。我的情况是:

我有两种通信方式(默认和关键),如果默认失败,我想从 docker-compose.yml 启动其他服务。

我想将这两种方法放在同一个 docker-compose.yml 文件中。

您对如何解决这种情况有任何想法吗?

提前致谢。

标签: dockerdocker-compose

解决方案


对于给定的 docker-compose.yml 文件:

version: "3.7"
services:
  default:
    image: alpine
    command: sleep 10 && exit 1
  critical:
    image: alpine
    command: tail -f /dev/null

您可以通过一个长时间运行的进程来获得您想要的效果,该进程等待“默认”服务退出,然后在看到退出代码 1 时启动关键服务(您可以调整确切的逻辑以适应您的故障模式):

docker-compose up -d default

接着:

result=$(docker wait $(docker-compose ps -q default)); if [ $result -eq "1" ]; then docker-compose up -d critical; fi

docker wait 命令将阻塞,直到“默认”容器退出并打印退出代码,该代码进入 $result 变量。之后的逻辑检查“1”,然后启动“关键”服务。


推荐阅读