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

docker-compose服务配置为no/unless-stopped却开机自启的原因咨询

问题解释与排查方向

核心逻辑先明确

Docker的restart策略是容器级别的,和docker-compose的停止命令行为直接绑定:

  • restart: no:容器绝不会自动重启,无论任何场景
  • restart: unless-stopped:容器意外退出(比如崩溃、宿主机强制断电)时会自动重启;宿主机重启后,容器会自动启动,除非你之前用docker stop或docker-compose stop手动停止过它

第一台笔记本:近期突然开机启动特定容器

可能的原因有这几个:

  1. 容器上次是非正常停止:你以为关机前优雅停止了,但可能该容器在关机前已经崩溃退出(比如代码报错、资源耗尽),或者宿主机是强制关机/意外断电,不是正常的优雅关机。这种情况下Docker会判定容器属于“意外退出”,触发unless-stopped的重启规则,开机后自动启动。
  2. 重启策略被修改:可能误操作通过docker update <容器名> --restart unless-stopped(甚至always)改了该容器的策略,哪怕docker-compose.yml里写的是no,容器实际生效的是最后修改的策略。可以用命令验证:docker inspect <容器名> --format '{{.HostConfig.RestartPolicy.Name}}'
  3. 被系统服务接管:有人在这台机器上创建了systemd(或其他 init 系统)的服务文件,设置开机自动启动这个docker-compose配置,绕过了docker-compose本身的重启策略。可以查systemd服务:systemctl list-unit-files | grep docker

第二台设备:一年来开机自动启动10个容器

大概率是这两个原因:

  1. unless-stopped策略触发:这些容器的restart配置是unless-stopped,而且你每次关机前的“优雅停止”没真正停止它们——比如你用的是docker-compose pause而不是docker-compose stop,或者关机前容器已经意外退出了。宿主机重启后,Docker会按照规则自动启动这些没被手动停止的容器。
  2. 关机操作不彻底:如果关机前只关闭了终端窗口,但没执行docker-compose stop/docker stop,容器其实还在后台运行,宿主机重启后Docker会自动恢复这些运行状态的容器。

验证方法

  • 查单个容器的实际重启策略:docker inspect <容器ID/名称> --format '{{.HostConfig.RestartPolicy.Name}}'
  • 看容器停止状态:docker inspect <容器ID/名称> --format '{{.State.Status}} 退出码:{{.State.ExitCode}} 停止时间:{{.State.FinishedAt}}',如果退出码非0,说明是意外崩溃;如果停止时间远早于关机时间,说明容器早挂了没被手动停止。
  • 检查系统自启服务:比如systemd下有没有自定义的docker-compose启动服务,避免被外部服务触发启动。

内容的提问来源于stack exchange,提问作者Dustin Oprea

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:53:21