如何在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
相关产品推荐
相关产品推荐

