在运维工作中,Docker的运行状态有哪些?

在 Docker 运维中,容器的运行状态是监控和管理的核心依据。通过 docker ps(查看运行中容器)或 docker ps -a(查看所有容器)可以看到容器的状态,主要分为以下几类:

一、核心运行状态(最常见)

1. Up(运行中)

  • 含义:容器正常启动并运行中,主进程(如 nginxjava)处于活跃状态。
  • 示例Up 5 minutes(已运行5分钟)。
  • 运维意义:这是容器的“正常工作状态”,需确保关键服务的容器长期处于此状态。

2. Exited(已退出)

  • 含义:容器已停止运行(主进程终止),是最常见的非运行状态。
  • 细分场景
    • Exited (0) 3 minutes ago:正常退出(主进程执行完任务后主动终止,如一次性脚本容器)。
    • Exited (1) 1 minute ago:异常退出(退出码非0,可能因错误、崩溃导致,需查看日志排查)。
  • 运维意义:非预期的 Exited 状态需要重点关注(如服务容器意外停止)。

二、过渡状态(临时出现)

1. Created(已创建)

  • 含义:容器已被创建(通过 docker createdocker 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)后重建。

四、如何查看状态及退出码?

  1. 查看所有容器状态

    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
    
  2. 查看容器退出码(排查异常退出)

    docker inspect -f '{{.State.ExitCode}}' 容器名或ID
    
    • 退出码 0:正常退出(如任务完成)。
    • 非0退出码(如 1137):异常退出(需结合日志排查,如 docker logs 容器名)。

五、状态流转关系(简化版)

Created(已创建) → Up(运行中)
                   ↓
Exited(已退出) ← ↑
(异常退出时)→ Restarting(重启中)→ Up(若重启成功)

总结

容器的核心状态是 Up(正常)和 Exited(停止),过渡状态 RestartingCreated 需关注是否符合预期,特殊状态 PausedDead 需手动干预。运维中需重点监控 Exited(非0退出码)和 Restarting 状态,及时排查服务稳定性问题。

posted @ 2025-07-29 16:00  天道酬勤zjh  阅读(36)  评论(0)    收藏  举报