目录
1 容器生命周期概述
2 容器创建(docker create)
2.1 docker create命令详解
2.2 创建流程解析
2.3 创建与运行的区别
3 容器启动(docker start)
3.1 docker start命令详解
3.2 启动流程解析
3.3 启动与运行的区别
4 容器运行管理
4.1 查看运行状态
4.2 暂停与恢复(docker pause/unpause)
4.3 停止与重启(docker stop/restart)
5 容器删除(docker rm)
5.1 删除命令详解
5.2 删除流程解析
5.3 数据持久化策略
6 容器生命周期实践示例
7 常见问题与解决方案
7.1 容器启动后立即退出
7.2 端口冲突
7.3 容器无法删除
8 总结
1 容器生命周期概述
Docker容器的生命周期包含多个关键状态和转换过程,理解这些状态及其转换对于有效管理容器至关重要,容器生命周期主要包括以下状态和操作:

2 容器创建(docker create)
2.1 docker create命令详解
- docker create命令用于创建一个新的容器但不立即启动它:
docker create [选项] 镜像 [命令] [参数...]
常用选项:
- --name:为容器指定名称
- -p/--publish:发布容器端口到主机
- -v/--volume:挂载数据卷
- -e/--env:设置环境变量
- --restart:配置重启策略
- -it:分配交互式终端
- 示例:
docker create --name myweb -p 8080:80 nginx:latest
2.2 创建流程解析

- 用户执行docker create命令
- Docker客户端将请求发送给Docker守护进程
- 守护进程检查镜像是否存在(不存在则尝试拉取)
- 创建容器文件系统(基于镜像层+可写层)
- 应用所有配置选项(网络、卷、环境变量等)
- 返回创建的容器ID
- 客户端显示创建结果
2.3 创建与运行的区别
特性 | docker create | docker run |
容器状态 | 仅创建,不启动 | 创建并立即启动 |
执行速度 | 较快 | 较慢(包含启动过程) |
使用场景 | 需要预先配置后启动 | 需要立即运行的容器 |
后续操作 | 需要手动start | 已自动启动 |
日志输出 | 无 | 立即开始产生日志 |
3 容器启动(docker start)
3.1 docker start命令详解
- docker start命令用于启动一个或多个已停止的容器:
docker start [选项] 容器 [容器...]
常用选项:
- -a/--attach:附加STDOUT/STDERR并转发信号
- -i/--interactive:附加容器的STDIN
- --checkpoint:从检查点恢复
- 示例:
docker start -ai myweb
3.2 启动流程解析

- 用户执行docker start命令
- Docker客户端将请求发送给守护进程
- 守护进程准备容器运行时环境
- 初始化网络栈(如果未初始化)
- 挂载所有配置的卷
- 执行容器入口点命令
- 返回启动结果给客户端
3.3 启动与运行的区别
- docker run实际上是docker create和docker start的组合:
# 以下两条命令效果相似
docker run -d --name myweb nginx
docker create --name myweb nginx && docker start myweb
关键区别:
- docker run无法设置某些只能在create阶段设置的参数
- docker create + start可以更精确控制创建和启动过程
- docker run会自动附加终端(除非使用-d)
4 容器运行管理
4.1 查看运行状态
# 查看容器列表
docker ps # 仅运行中的容器
docker ps -a # 所有容器(包括已停止的)# 查看容器详情
docker inspect 容器# 查看容器日志
docker logs 容器# 查看容器资源使用
docker stats 容器
4.2 暂停与恢复(docker pause/unpause)
- 暂停容器会冻结容器内的所有进程:
# 暂停容器
docker pause 容器# 恢复容器
docker unpause 容器
使用场景:
- 临时释放CPU资源
- 调试容器状态
- 保持容器状态的同时暂停服务
注意事项:
- 暂停的容器仍然占用内存
- 网络连接会被保持但不会处理
- 文件系统保持打开状态
4.3 停止与重启(docker stop/restart)
- 优雅停止容器:
# 停止容器(发送SIGTERM,然后SIGKILL)
docker stop [-t 超时时间] 容器# 强制停止(立即发送SIGKILL)
docker kill 容器# 重启容器
docker restart 容器
停止流程:
- 发送SIGTERM信号
- 等待默认10秒(可通过-t调整)
- 如果仍未停止,发送SIGKILL
- 容器状态变为"Exited"
5 容器删除(docker rm)
5.1 删除命令详解
# 删除已停止的容器
docker rm 容器# 强制删除运行中的容器
docker rm -f 容器# 删除所有已停止的容器
docker container prune# 删除容器时同时删除关联的卷
docker rm -v 容器
5.2 删除流程解析

5.3 数据持久化策略
删除容器时,默认会丢失容器内的所有数据,要实现数据持久化:
- 使用数据卷:
docker run -v /data/host:/data/container nginx
- 使用命名卷:
docker volume create myvol docker run -v myvol:/data/container nginx
- 绑定挂载主机目录:
docker run -v $(pwd):/app nginx
6 容器生命周期实践示例
- 命名容器:总是使用--name指定有意义的名称
docker run --name web-server nginx
- 自动清理:运行一次性容器时使用--rm选项
docker run --rm alpine echo "hello"
- 重启策略:根据需求配置适当的重启策略
docker run --restart unless-stopped redis
- 资源限制:为容器设置适当的资源限制
docker run -m 512m --cpus 1.5 nginx
- 日志管理:配置适当的日志驱动和大小限制
docker run --log-driver json-file --log-opt max-size=10m nginx
7 常见问题与解决方案
7.1 容器启动后立即退出
问题现象:容器状态显示"Exited (0)"
可能原因:
- 容器内主进程结束
- 没有前台进程保持运行
- 配置错误导致快速失败
解决方案:
- 检查容器日志:
docker logs 容器
- 确保有前台进程运行
- 使用交互模式调试:
docker run -it --entrypoint sh 镜像
7.2 端口冲突
问题现象:Error starting userland proxy: listen tcp 0.0.0.0:80: bind: address already in use
解决方案:
- 更改主机端口:
docker run -p 8080:80 nginx
- 停止占用端口的服务
- 使用不同网络模式:
docker run --network host nginx
7.3 容器无法删除
问题现象:Error response from daemon: You cannot remove a running container
解决方案:
- 先停止容器:
docker stop 容器 && docker rm 容器
- 强制删除:
docker rm -f 容器
- 删除所有停止的容器:
docker container prune
8 总结
Docker容器的生命周期管理是容器化技术的核心技能,通过合理运用容器生命周期的各个阶段:创建、启动、运行、暂停、停止和删除等命令和技巧,可以高效地管理Docker容器,确保应用程序的稳定运行和资源的有效利用。记住,理解容器生命周期有助于调试问题、优化性能并构建可靠的容器化应用。