docker-compose与supervisord自动重启选型及共存问题咨询
supervisor托管docker-compose方案的生产实践反馈
稳定性结论
我在5台物理机/云主机上用这套方案跑了4年多,覆盖生产内部业务、测试环境整套容器栈,配置正确的前提下稳定性完全达标,从来没出现过无理由的服务中断、拉起失败的问题。网上说的“不稳定”“互相干扰”基本都是配置写错导致的,不是方案本身的设计缺陷。
二者重启机制会不会冲突?
首先要明确两个工具的监控层级完全不一样,正常配置下根本碰不到对方的管控范围:
- docker(含docker-compose)的重启机制管的是容器内部进程:比如容器内服务OOM崩溃、业务进程异常退出,由docker daemon根据你配的restart规则重启单个容器,这个过程在docker的运行时层面完成,supervisor感知不到也不会介入。
- supervisor管的是compose栈的整体生命周期:也就是你启动的compose主进程,只有当整个compose栈退出、docker daemon崩溃导致所有容器掉了这类宿主机/运行时层面的故障,supervisor才会触发重启动作。
真正会出现冲突的场景全是配置权责不清导致的,我自己早年也踩过坑:
最开始直接把supervisor的启动命令写成
docker-compose up -d,还开了autorestart=true、不管退出码就重试。因为加了-d参数,命令执行完就会正常退出,supervisor会以为进程挂了,每隔几秒就重复执行一次up -d。有次我做版本更新手动停了旧容器,刚准备拉新镜像,supervisor直接把旧容器给我拉起来了,折腾了十多分钟才找到原因。
要完全避免冲突只要守两个配置原则就行:
- 如果要让supervisor承担compose栈的自动重启能力,启动命令就写
docker-compose up(不要加-d后台参数),让compose前台运行,日志直接输出给supervisor接管;同时把容器的restart策略设为no,把重启权责全交给supervisor,避免两边同时触发重启动作。 - 如果只是想让supervisor做开机自启,不需要它管运行时重启,那就保留
docker-compose up -d命令,把supervisor的autorestart设为false,启动成功后就不再干预后续容器的运行,重启能力全交给docker自身的restart规则。
相比直接用docker-compose,引入supervisor的实际收益
除了开机自启之外,生产用下来几个实打实的好处:
- 统一日志管理:所有compose栈的日志直接交给supervisor接管,不用单独给docker配置logrotate日志轮转,supervisor会自动按服务名分文件存储、按大小/时间切割日志,查日志不用翻docker的日志目录,也不用记
docker logs的参数,多个compose项目混跑的时候查问题效率高很多。 - 跨类型服务的启动顺序管控:docker原生的开机自启是daemon启动后乱序拉所有容器,经常出现业务应用先启动、依赖的数据库/消息队列容器还没就绪,导致应用启动报错。用supervisor可以给所有服务(不管是跑在宿主机上的mysql、监控agent,还是不同的compose栈)配置启动优先级、启动等待时间、重试次数,按基础组件→中间件→业务应用的顺序依次拉起,从根源上减少启动顺序导致的故障。
- 故障上下文留存更完整:如果compose栈因为磁盘满了、端口冲突、docker daemon崩溃这类宿主机层面的问题启动失败,supervisor会把完整的错误输出、退出码存在自己的日志里,不会像docker原生自启那样,失败信息零散混在daemon日志和系统日志里,排查问题不用到处找记录。
- 更方便对接现有运维体系:很多传统运维环境本来就已经对接了supervisor的状态接口,不用额外开发对接docker API,就能在现有运维平台上统一管理所有服务的状态、做启停操作,运维不用记两套操作命令,学习成本低。
- 轻量的权限隔离:supervisor可以给每个compose栈指定独立的运行用户、工作目录、umask,不用在每个compose文件里单独写user配置,多团队共用机器的时候做权限隔离更方便。
最后提个适用边界:如果你已经用systemd把所有服务的启动顺序、日志轮转、告警都配全了,或者已经上了容器编排平台,完全没必要硬加一层supervisor,多一个组件就多一个潜在故障点。另外用docker compose v2(也就是docker插件版的compose)的话,记得把启动命令里的docker-compose换成docker compose,不然会因为找不到命令启动失败。
内容的提问来源于stack exchange,提问作者user19413311
相关产品推荐
相关产品推荐

