You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Docker Swarm模式下实现FastAPI崩溃后自动重启

问题解答

假设合理性验证

你的这个假设不存在原则性错误,仅补充几个需要注意的细节:

  • Docker Swarm 本身的核心能力就是维持服务的期望副本数,当某个实例因为异常崩溃退出,Swarm 会自动在集群节点上拉起新的实例替代,不需要你手动操作重启
  • 只要你配置的服务副本数≥2,单实例崩溃期间其余实例确实可以正常承接流量,不会触发整体服务不可用,前提是你的FastAPI应用本身是无状态的,没有把会话、缓存等业务数据存在实例本地
  • 要提前配置好日志采集规则,统一采集FastAPI的标准输出、标准错误输出到集中日志平台,避免实例崩溃重建后本地日志丢失,无法排查崩溃根因

Docker Swarm 自动重启配置方法

你可以通过两种常用方式配置自动重启策略:

方式1:创建服务时直接指定参数

执行docker service create命令时添加重启策略参数即可,参考示例:

docker service create \
  --name fastapi-app \
  --replicas 3 \
  --restart-condition any \
  --restart-delay 5s \
  --restart-max-attempts 3 \
  --restart-window 120s \
  -p 8000:8000 \
  your-fastapi-image:latest

参数说明:

  • --restart-condition any:只要实例退出就触发重启,不限制退出码
  • --restart-delay 5s:两次重启之间的间隔时间,避免实例反复崩溃频繁重启占用资源
  • --restart-max-attempts 3:单次实例崩溃最多尝试重启3次,超过次数就不再重启
  • --restart-window 120s:统计重启次数的时间窗口,2分钟内累计重启3次就停止尝试

方式2:通过Stack Compose文件配置

如果是用docker stack deploy批量部署服务,在compose.yml里添加restart_policy配置即可,参考配置:

version: '3.8'
services:
  fastapi-app:
    image: your-fastapi-image:latest
    ports:
      - "8000:8000"
    deploy:
      replicas: 3
      restart_policy:
        condition: any
        delay: 5s
        max_attempts: 3
        window: 120s

配置完成后执行docker stack deploy -c compose.yml fastapi-stack即可生效,后续只要FastAPI实例因为异常崩溃退出,Swarm都会自动按照配置的策略重启实例。

内容的提问来源于stack exchange,提问作者Ahmad Ismail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:54:04