精准掌控容器运行状态是运维核心能力,涉及服务启停、故障恢复等关键场景。本文将详解三大命令的底层原理与生产实践。
一、容器状态全景图
二、核心命令精解
1. 启动容器:docker start
# 基础语法
docker start [选项] <容器名/ID>
# 常用参数
docker start -a # 附加输出流(实时打印日志)
docker start -i # 附加输入流(交互模式)
▍ 典型场景
# 启动MySQL服务容器
docker start mysql_db
# 启动时实时查看日志
docker start -a nginx_server
运行原理:
当容器被停止时,文件系统变更会保留在可写层中。start命令将重新挂载文件系统并执行原始启动命令。
2. 停止容器:docker stop
安全停机流程:
sequenceDiagram
Docker守护进程->>容器进程: 发送SIGTERM(15)
容器进程->>Docker守护进程: 执行预定义清理操作
容器进程->>Docker守护进程: 正常退出(Exit 0)
Note right of Docker守护进程: 若30秒未退出
Docker守护进程->>容器进程: 发送SIGKILL(9)强制终止
▍ 操作示例
# 安全停止容器(默认30秒超时)
docker stop web_app
# 自定义超时时间(单位:秒)
docker stop -t 60 mysql_db
3. 重启容器:docker restart
执行流程等价于:
docker stop <容器> && docker start <容器>
▍ 生产级应用
# 重启Nginx服务(不中断端口监听)
docker restart nginx
# 带状态检查的重启(需容器健康检查配置)
docker restart --time 30 --check health web_server
重要区别:
命令 | 运行状态要求 | 文件系统保留 | PID变化 |
---|---|---|---|
stop+start | 需先停止 | 保留所有变更 | PID更新 |
restart | 可直接重启 | 保留所有变更 | PID更新 |
docker run | 无 | 全新文件系统 | 生成新PID |
三、企业级运维实践
1. 状态管理黄金组合
# 批量启动同前缀容器
docker ps -a --filter name=prod_* --format "{{.ID}}" | xargs docker start
# 安全停止集群服务(分级操作)
docker stop service_nginx && \
docker stop service_redis && \
docker stop service_mysql
2. 重启策略配置
通过--restart
策略实现自愈:
docker run -d \
--restart=on-failure:5 \ # 失败时最多重启5次
--restart-delay=10s \ # 重启间隔10秒
nginx
策略对照表:
策略 | 触发条件 | 适用场景 |
---|---|---|
no | 永不重启 | 测试环境 |
always | 任何退出都重启 | 核心服务 |
unless-stopped | 手动stop除外 | 常规生产环境 |
on-failure[:max] | 非0退出时重启 | 容错型应用 |
四、状态查询与监控
1. 实时状态检测
# 查看容器运行状态
docker inspect -f '{{.State.Status}}' mysql_db
# 检查退出代码(0表示正常退出)
docker inspect -f '{{.State.ExitCode}}' web_app
2. 历史状态跟踪
# 查看容器事件时间线
docker events --filter container=nginx_srv \
--since "2023-08-01"
输出示例:
2023-08-15T10:23:45 start container
2023-08-15T10:25:02 pause container
2023-08-15T10:30:15 stop container
运维铁律
- 停止优先级:
stop
>kill
(除进程僵死等极端情况) - 重启生效条件:容器配置文件修改后必须
restart
- 生产禁例:
替代方案:# 禁止直接重启数据库容器(会导致事务中断) docker restart mysql_master
# 主从切换后重启旧主节点 mysql -e "STOP SLAVE;" && \ docker restart mysql_old_master
通过
docker stats
实时监控资源状态,配合restart
策略实现无人值守运维,可降低70%生产环境人工干预。