You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

当Gunicorn崩溃时如何重启Docker容器?

解决Docker Compose容器故障后自动重启的问题

嘿,这个场景太常见了!Docker Compose其实自带了重启策略配置,刚好能解决你的困扰,不用每次手动重建容器。

首先,你的docker-compose.yml里缺少了关键的restart配置项——默认情况下,容器退出后是不会自动重启的。你可以根据自己的需求选择以下几种重启策略:

  • restart: always:不管容器是正常退出还是故障崩溃,只要容器不在运行状态就会自动重启。不过如果你手动执行docker-compose stop停止容器,下次启动时才会重新运行它。
  • restart: on-failure:max-retries:只有当容器以非零退出码(也就是故障崩溃)时才会重启,还可以指定最大重启次数,比如on-failure:5表示最多重启5次,适合你这种担心无限重启的场景。
  • restart: unless-stopped:这是生产环境最常用的配置——除非你手动停止容器,否则无论是应用崩溃、Docker服务重启,容器都会自动恢复运行。

针对你的Flask+Gunicorn服务,我推荐用unless-stopped或者带次数限制的on-failure,修改后的配置如下:

version: "3"
services:
  api:
    image: my-container:latest
    command: ["gunicorn", "--bind", "0.0.0.0:8000", "wsgi:app"]
    volumes:
      - ./api:/api
    restart: unless-stopped  # 替换成你需要的重启策略

修改后执行docker-compose up -d重新启动服务,之后如果Gunicorn因为Flask应用故障退出,容器就会自动重启了。

另外,建议你同时排查下Flask应用崩溃的根源:可以用docker-compose logs -f api实时查看容器日志,找出导致非零退出的具体错误(比如未捕获的异常、资源耗尽等),从根本上解决问题,比单纯依赖重启策略更靠谱。

内容的提问来源于stack exchange,提问作者Jason Strimpel

火山引擎 最新活动