Docker 容器的 Running(运行中)和 Starting(启动)有什么区别?

run 是"创建+启动"二合一(产生新容器),start 是"启动已存在的容器"(保留可写层,不恢复进程内存);running 表示主进程运行,health: starting 则表示初始健康判定尚未完成。本文讲清 docker run/start/create 的状态流转。

最佳实践
Docker 容器的 Running(运行中)和 Starting(启动)有什么区别?封面

概念梳理:docker run = 创建新容器并启动(create + start 合体);docker start = 把一个已存在但停止的容器重新拉起(文件系统状态保留);docker create = 只创建不启动。Running 是状态描述——主进程正在执行;starting 还可能是健康检查状态,可与 running 同时出现,表示容器已运行但尚未完成初始健康判定。

状态流转图

(不存在) --docker create--> Created(已创建未启动)
Created    --docker start-->  Running
(不存在) --docker run----->  Running(一步到位)
Running    --docker stop--->  Exited(停止,状态保留)
Exited     --docker start-->  Running(启动新进程,保留可写层,不恢复内存执行现场)
Exited     --docker rm----->  (消失)

关键差异点

run vs start:

docker run docker start
对象 镜像(造新容器) 已存在的容器
文件系统 全新(镜像+空可写层) 沿用停止时的状态
配置 每次可给新参数(-p/-v/-e…) 沿用配置;start 本身不能更改端口、挂载和环境变量

所以:想改端口/环境变量,start 做不到——需创建替代容器,并先验证持久数据和回退安排。部分资源限制/重启策略可用 docker update 调整。这正是"容器配置是创建期定型"的体现。

常用命令对照

docker run -d --name web nginx      # 新建并跑
docker stop web                     # 停(状态保留)
docker start web                    # 原样拉起(端口、卷、写过的文件都在)
docker restart web                  # stop + start 连做
docker rm web                       # 连容器带可写层删除
docker ps                           # 看 Running 的
docker ps -a                        # 看所有状态的

易混点

  1. start 不接新参数:docker start -p 不存在,不能通过 start 修改发布端口
  2. restart 是停启同一容器:不换镜像不换配置
  3. Created 状态的容器:create 出来没 start 的,docker ps -a 可见,直接 start 即跑

常见问题(FAQ)

Q:start 起来的容器能改环境变量吗?
A:不能。环境变量创建期定型;改配置的正确姿势是 rm + run(仍需核对卷复用、应用兼容性和备份,不能保证无损)。

Q:run 和 up(compose)什么关系?
A:docker compose up ≈ 按需 create+start+重建的编排版,配置变了自动重建容器。

Q:容器 stop 后里边的数据还在吗?
A:普通容器的可写层保留;--rm 容器退出后自动删除,tmpfs 不持久化。start 不会恢复进程内存。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台