【Docker】docker swarm使用场景小结,重启后的多个退出容器的清理
Docker Service 与容器管理详解
在日常使用 Docker 时,我们常常用
docker run来启动容器。但一旦涉及 集群管理、服务编排,就会用到 Docker Swarm 模式。
在 Swarm 中,我们不再直接管理单个容器,而是管理 Service(服务)。
1. Service 与 Container 的关系
在 Swarm 中,容器是由 服务 (Service) 来统一调度和管理的。
docker run→ 直接启动一个独立容器。docker service create→ 创建一个服务,Swarm 负责保证该服务的副本数(replicas)。
比如:
docker service create --name web --replicas 2 nginx
会启动一个名为 web 的服务,并保持 2 个副本始终运行。
这两个副本本质上还是容器,但它们的生命周期由 Swarm 控制,而不是用户手动 docker stop/start。
2. 为什么关机重启后 docker ps -a 变得很乱?
很多人遇到的情况是:
docker ps -a
里面有一堆退出的容器,还有新的容器在运行,看起来很混乱。
原因是:
-
Swarm 会维护副本数。如果某个容器退出,Swarm 会立即拉起一个新容器。
-
旧容器不会消失,而是以
Exited状态留在docker ps -a里。 -
所以就会出现 多个历史容器,名字类似:
service_name.1.abcd1234xxxx service_name.1.efgh5678yyyy
这些是同一个副本(.1 表示副本编号),只是旧容器退出了,Swarm 新建了一个替代容器。
3. 正确的观测方式
不要再单纯依赖 docker ps -a,在 Swarm 模式下应该使用以下命令:
-
查看所有服务:
docker service ls输出示例:
ID NAME MODE REPLICAS IMAGE abc123xyz web replicated 2/2 nginx:latest -
查看某个服务的副本任务:
docker service ps web你会看到:
NAME DESIRED STATE CURRENT STATE ERROR web.1 Running Running 2h ago \_ web.1 Shutdown Failed 2h ago "task: non-zero exit (255)" web.2 Running Running 2h ago \_ web.2 Shutdown Rejected "cannot create a swarm scoped …"这解释了为什么
docker ps -a有那么多退出容器:它们是 Swarm 的历史任务记录。 -
查看服务日志:
docker service logs web
4. 常见的 Rejected / Failed
-
Rejected “cannot create a swarm scoped …”
通常是配置问题,比如端口冲突、错误的网络类型(Swarm 不支持--network bridge,要用 overlay)。 -
Failed “task: non-zero exit (255)”
表示容器启动后异常退出。
用
docker service logs <service>查看容器日志排查。
5. 如何清理退出的容器?
虽然 Swarm 会留下历史任务的容器,但可以手动清理:
docker container prune
这会删除所有 Exited 的容器,让 docker ps -a 更干净。
但注意:这不会影响 正在运行的副本。
6. 如果只是单机部署?
如果你没有使用 Swarm 集群的需求(比如只是部署到一台服务器),建议不要用 docker service create,而是用:
docker run -d --name web --restart always -p 8080:80 nginx
--restart always可以保证容器随系统启动而自动运行。- 这样就不会产生一堆历史容器,管理起来更简单。
7. 总结
-
Swarm 模式下,容器由服务管理,退出的容器会被替代,但历史记录仍会保留。
-
正确的管理方式是:
docker service ls→ 查看服务列表docker service ps <service>→ 查看副本运行情况docker service logs <service>→ 查看日志
-
清理环境 用
docker container prune。 -
如果只是单机运行,推荐直接用
docker run --restart always,而不是 Swarm。
延申:Swarm 的定位
-
优点:内置于 Docker,轻量级,快速上手,适合中小项目的服务编排。
-
缺点:功能比 Kubernetes 简单,社区生态较弱。
-
现实选择:
- 生产环境多用 Kubernetes。
- 内网实验、小型项目,用 Swarm 足够。
更多推荐



所有评论(0)