容器生命周期
了解容器的生命周期对于有效管理和调试容器至关重要。本文将详细介绍容器从创建到销毁的整个过程。
容器的状态
Docker 容器在其生命周期中会经历多个状态:
Created → Running → Paused → Stopped → Removed ↓ ↓ ↓ ↓ └─────────┴─────────┴─────────┘ 可以重启主要状态
- Created(已创建): 容器已创建但未启动
- Running(运行中): 容器正在运行
- Paused(暂停): 容器进程被暂停
- Stopped(已停止): 容器已停止
- Removed(已删除): 容器被删除
完整生命周期
1. 创建(Create)
# 创建容器但不启动docker create --name my-nginx nginx此时容器处于 Created 状态。
2. 启动(Start)
# 启动容器docker start my-nginx容器进入 Running 状态。
3. 运行(Run)
# 创建并启动(一步完成)docker run --name my-nginx nginx等同于 docker create + docker start。
4. 暂停(Pause)
# 暂停容器docker pause my-nginx
# 恢复容器docker unpause my-nginx5. 停止(Stop)
# 优雅停止(发送 SIGTERM,等待 10 秒后发送 SIGKILL)docker stop my-nginx
# 立即停止(发送 SIGKILL)docker kill my-nginx6. 重启(Restart)
# 重启容器docker restart my-nginx7. 删除(Remove)
# 删除已停止的容器docker rm my-nginx
# 强制删除运行中的容器docker rm -f my-nginx状态转换图
┌─────────┐ create ┌─────────┐ start ┌─────────┐│ null │─────────→│ Created │─────────→│ Running │└─────────┘ └─────────┘ └─────────┘ │ │ ↑ │ rm │ │restart ↓ ↓ │ ┌─────────┐ stop ┌─────────┐ │ Removed │←─────────│ Stopped │ └─────────┘ └─────────┘ ↑ │ rm │ │start │ ↓ ┌─────────┐ │ Created │ └─────────┘查看容器状态
# 查看运行中的容器docker ps
# 查看所有容器docker ps -a
# 查看容器详细状态docker inspect my-nginx | grep Status
# 输出示例"Status": "running"重启策略
Docker 提供了自动重启策略:
no(默认)
# 不自动重启docker run --restart=no nginxon-failure
# 失败时重启(可指定最大重启次数)docker run --restart=on-failure:5 nginxalways
# 总是重启docker run --restart=always nginxunless-stopped
# 除非手动停止,否则总是重启docker run --restart=unless-stopped nginx容器退出码
当容器停止时,会返回退出码:
- 0: 正常退出
- 1: 应用错误
- 125: Docker daemon 错误
- 126: 命令无法执行
- 127: 命令未找到
- 137: 被 SIGKILL 杀死(通常是 OOM)
- 143: 被 SIGTERM 终止
# 查看容器退出码docker inspect my-nginx --format='{{.State.ExitCode}}'实用命令
查看运行时间
docker ps --format "table {{.Names}}\t{{.Status}}"监控容器状态
# 实时监控watch -n 2 'docker ps'
# 查看容器事件docker events --filter container=my-nginx健康检查
# Dockerfile 中定义HEALTHCHECK --interval=30s --timeout=3s \ CMD curl -f http://localhost/ || exit 1
# 查看健康状态docker inspect --format='{{.State.Health.Status}}' my-nginx最佳实践
- 使用重启策略: 生产环境推荐使用
--restart=unless-stopped - 优雅停止: 确保应用能正确处理 SIGTERM 信号
- 监控健康: 配置健康检查,及时发现问题
- 日志管理: 定期清理日志,避免磁盘占满
- 及时清理: 删除不需要的容器和镜像