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

run 是"创建+启动"二合一(产生新容器),start 是"启动已存在的容器"(复用旧容器状态);running 是容器主进程正在执行的状态。本文讲清 docker run/start/create 的状态流转。

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

概念梳理:docker run = 创建新容器启动(create + start 合体);docker start = 把一个已存在但停止的容器重新拉起(文件系统状态保留);docker create = 只创建不启动。Running 是状态描述——主进程正在执行;Starting 是动作——把容器从停止态转入运行态。

状态流转图

(不存在) --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 做不到——得 rm 后重新 run。这正是"容器配置是创建期定型"的体现。

常用命令对照

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 ... 不存在,配置改不了
  2. restart 是停启同一容器:不换镜像不换配置
  3. Created 状态的容器:create 出来没 start 的,docker ps -a 可见,直接 start 即跑

观测云对照

容器状态流转全程留痕。 Created→Running→Exited 的每次转换,观测云容器事件都有记录;异常的 stop-start 抖动(频繁重启)由监控器按次数告警。

常见问题(FAQ)

Q:start 起来的容器能改环境变量吗?
A:不能。环境变量创建期定型;改配置的正确姿势是 rm + run(数据在卷里则无伤)。

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

Q:容器 stop 后里边的数据还在吗?
A:可写层保留,start 后原样可见;rm 才删除。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

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

立即开始

选择观测云版本

代码托管平台