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

Docker Swarm为何未重启异常退出的Python应用容器

Docker Swarm未自动重启故障容器的原因

核心原因1:Python代码强制返回0退出码,不符合on-failure重启触发条件

你的Python代码finally块中存在return 0语句,而Python语法规则中finally块的代码一定会在try/except逻辑执行完成后执行:

  • 即便except块捕获异常后执行了raise抛出异常,最终也会被finally的return 0覆盖,进程退出码始终为0
  • Docker Swarm的on-failure重启策略仅会在容器进程以非0退出码异常退出时触发重启,退出码为0属于正常退出,不会触发重启

核心原因2:Docker Compose重启策略配置语法错误

你给inserter13服务配置的restart_policy不符合Compose语法规范:

# 错误配置
deploy:
  restart_policy:
    on-failure # default is 'any'

正确的配置需要明确指定condition字段,你漏写该前缀会导致Swarm无法正确解析重启策略,配置未生效:

# 正确配置
deploy:
  restart_policy:
    condition: on-failure

修复方案

  1. 修改Python代码,移除finally块中的return 0语句,异常场景下让进程自然返回非0退出码,正常执行完成可按需返回0
  2. 修正inserter13服务的restart_policy配置,可根据业务需要补充重试次数、重启延迟参数,避免短时间频繁重启:
deploy:
  restart_policy:
    condition: on-failure
    max_attempts: 10 # 最大重试次数,按需调整
    delay: 5s # 每次重启间隔,按需调整
  1. 验证修复效果:手动模拟程序异常,执行echo $?确认进程退出码为非0,部署后触发异常验证Swarm自动重启逻辑是否正常生效

内容的提问来源于stack exchange,提问作者Sean McCarthy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:54:04