在运维工作中,Docker的运行状态有哪些?
在 Docker 运维中,容器的运行状态是监控和管理的核心依据。通过 docker ps(查看运行中容器)或 docker ps -a(查看所有容器)可以看到容器的状态,主要分为以下几类:
一、核心运行状态(最常见)
1. Up(运行中)
- 含义:容器正常启动并运行中,主进程(如
nginx、java)处于活跃状态。 - 示例:
Up 5 minutes(已运行5分钟)。 - 运维意义:这是容器的“正常工作状态”,需确保关键服务的容器长期处于此状态。
2. Exited(已退出)
- 含义:容器已停止运行(主进程终止),是最常见的非运行状态。
- 细分场景:
Exited (0) 3 minutes ago:正常退出(主进程执行完任务后主动终止,如一次性脚本容器)。Exited (1) 1 minute ago:异常退出(退出码非0,可能因错误、崩溃导致,需查看日志排查)。
- 运维意义:非预期的
Exited状态需要重点关注(如服务容器意外停止)。
二、过渡状态(临时出现)
1. Created(已创建)
- 含义:容器已被创建(通过
docker create或docker run初始化),但尚未启动(未执行docker start)。 - 示例:刚用
docker create命令创建的容器,或启动失败后停留在初始状态的容器。 - 运维意义:通常是临时状态,需手动执行
docker start启动。
2. Restarting(重启中)
- 含义:容器因配置了自动重启策略(如
--restart=always),在退出后被 Docker 自动重启的过程中。 - 示例:服务崩溃后,Docker 尝试重启,此时状态显示为
Restarting (1) 5 seconds ago。 - 运维意义:频繁出现此状态可能意味着服务存在稳定性问题(如启动后立即崩溃),需排查根源。
三、特殊状态(较少见)
1. Paused(已暂停)
- 含义:容器被手动暂停(通过
docker pause命令),所有进程暂停执行,资源暂时冻结。 - 示例:
Paused 2 minutes ago。 - 运维意义:通常用于临时调试或资源占用控制,需通过
docker unpause恢复运行。
2. Dead(已死亡)
- 含义:容器因严重错误(如文件损坏、权限问题)无法正常终止,处于“僵死”状态(极少见)。
- 处理方式:无法通过
docker stop正常停止,需强制删除(docker rm -f)后重建。
四、如何查看状态及退出码?
-
查看所有容器状态:
docker ps -a --format "table {{.Names}}\t{{.Status}}"输出示例:
NAMES STATUS my-nginx Up 2 hours test-app Exited (0) 30 minutes ago demo Restarting (1) 10 seconds ago -
查看容器退出码(排查异常退出):
docker inspect -f '{{.State.ExitCode}}' 容器名或ID- 退出码
0:正常退出(如任务完成)。 - 非0退出码(如
1、137):异常退出(需结合日志排查,如docker logs 容器名)。
- 退出码
五、状态流转关系(简化版)
Created(已创建) → Up(运行中)
↓
Exited(已退出) ← ↑
(异常退出时)→ Restarting(重启中)→ Up(若重启成功)
总结
容器的核心状态是 Up(正常)和 Exited(停止),过渡状态 Restarting 和 Created 需关注是否符合预期,特殊状态 Paused 和 Dead 需手动干预。运维中需重点监控 Exited(非0退出码)和 Restarting 状态,及时排查服务稳定性问题。
浙公网安备 33010602011771号