在运维工作中,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
状态,及时排查服务稳定性问题。