首页/云/Docker 容器速查/docker commit 容器保存为镜像
基础命令50 条

docker commit 容器保存为镜像

把容器的可写层固化成一个新镜像,用于临时保存现场或做快速原型;正规交付仍应回到 Dockerfile 重建。

Docker 容器速查云更新于 2026-10-13

docker commit 是什么

commit 把容器可写层的当前内容固化成一个新镜像,可以理解为给运行中的容器拍快照。它在应急与实验场景很实用:容器里手工修好了配置、装好了依赖,先提交成镜像把状态保住。但要清楚它的代价——提交产物没有构建历史、内容不可复现、容易夹带日志与临时文件,所以正规交付路径仍然是把改动写回 Dockerfile 重新构建。

基本信息

语法docker commit [选项] 容器 [仓库[:标签]]
常用选项-a 作者、-m 提交说明、-c 追加 Dockerfile 指令、--pause=false 不暂停容器
默认行为提交前暂停容器以保证文件系统一致性
提交内容可写层相对基础镜像的全部改动
提交内容不含挂载卷里的数据、容器网络与运行期设置
校验方式docker history 新镜像 查看层来源

典型使用场景

  • 调试现场快照:保留崩溃前的文件系统状态供事后分析
  • 应急修复留痕:先在容器里验证修复有效,再决定是否写回 Dockerfile
  • 实验性改造:在容器里试装依赖,确认可行后据此整理构建脚本
  • 移交排查材料:把问题容器提交成镜像交给他人复现
  • 临时产出物提取:把容器内的产物目录做成镜像再用 docker create 拷出

提交与核对

提交与核对
# 提交并标注作者与说明,方便日后追溯来源
 docker commit -a ops -m '排查现场:配置改回默认' web app/web:debug-20261013

# 提交时改启动命令(等价于追加一条 CMD)
 docker commit -c 'CMD ["node","server.js"]' web app/web:snapshot

# 核对新镜像的层构成:能看到多出一层未标注来源的提交层
 docker history app/web:snapshot

# 对比体积变化,判断是否夹带了日志与缓存
 docker images --format '{{.Repository}}:{{.Tag}} {{.Size}}' | grep app/web

选项怎么用

选项作用适用时机
-a记录作者团队协作追溯
-m提交说明说明改动原因与时间
-c追加构建指令补 CMD/ENV/EXPOSE 等
--pause=false不暂停直接提交容器不能暂停或要求无中断
--change 反复使用可叠加多条指令一次补齐多项配置
为什么提交产物不可复现:它来自运行时文件系统的实际内容,同一份 Dockerfile 无法重复出完全一致的结果,构建历史里也看不到改动来源,团队接手时无从判断镜像里到底装了什么。
提交出来的镜像里会包含容器运行期间写入的日志、缓存、临时文件甚至密钥,作为交付镜像前必须逐项清理或改用重新构建的方式。

易错点

  • 提交内容包含容器里的一切改动,包括日志、缓存与调试文件,直接当发布镜像会把无关内容带上生产
  • 基于快照继续开发会让环境与构建源脱节,问题无法回溯到 Dockerfile,改版时只能靠猜
  • 反复提交会让镜像层数不断累积、体积逐次膨胀,清理手段有限
  • 提交不含卷数据,用快照迁移服务时数据库等内容仍在卷里,恢复后才发现数据是空的

数据来源与参考

  • Docker 官方 CLI 参考:docker commit(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌