Docker容器状态管控核心三命令:start/stop/restart 完全指南

        精准掌控容器运行状态是运维核心能力,涉及服务启停、故障恢复等关键场景。本文将详解三大命令的底层原理与生产实践。


一、容器状态全景图

已创建:
docker
create
已创建
运行中:
start
运行中
已暂停:
pause
已暂停
unpause
已停止:
stop
已停止
已销毁:
rm
重启中:
restart
重启中

二、核心命令精解

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

运维铁律

  1. 停止优先级stop > kill(除进程僵死等极端情况)
  2. 重启生效条件:容器配置文件修改后必须restart
  3. 生产禁例
    # 禁止直接重启数据库容器(会导致事务中断)
    docker restart mysql_master
    
    替代方案
    # 主从切换后重启旧主节点
    mysql -e "STOP SLAVE;" && \
    docker restart mysql_old_master
    

通过docker stats实时监控资源状态,配合restart策略实现无人值守运维,可降低70%生产环境人工干预。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sg_knight

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值