如果应用初始化失败,如何停止Docker容器启动?

时间:2019-01-11 08:42:42

标签: docker docker-compose

我们有一个flask服务应用程序,该应用程序连接到mysql数据库以获取数据。该烧瓶应用程序通过docker容器中的gunicorn服务器进行服务器。我们正在使用docker-compose。

应用程序启动时,我们将连接到数据库。如果与数据库的连接失败(尝试3次),则应用程序将无法初始化并退出。但要注意容器已启动。当我的应用无法启动时,如何使容器也无法启动?

3 个答案:

答案 0 :(得分:0)

使用restart:no 重新启动策略有3个选项。

- restart: no
- restart: always
- restart: on-failure

答案 1 :(得分:0)

如果它确实开始(而不是永久重新启动),请尝试在入口点脚本的顶部添加trap 'exit' ERR

答案 2 :(得分:0)

首先,您必须告诉docker-compose您希望所有容器在主服务退出时停止执行。这是使用--abort-on-container-exit命令行参数完成的。假设您有2种服务:

docker-compose.yml

version: '3'
services:
  db:
    ...
  flask:
    ...

然后命令行将类似于:

docker-compose up --exit-code-from flask --abort-on-container-exit

因此,告诉您的flask服务是主要服务,并且您不想在退出时继续操作。

第二,您将flask主进程(PID 1)配置为在无法连接数据库时退出(最好使用非零退出代码)。就是这样。