docker commit可将运行中容器的文件系统变更层固化为新镜像,适用于快速调试与环境复现,但不保存内存、网络状态及挂载卷数据,且不可追溯构建过程,生产环境应优先使用dockerfile。

直接用 docker commit 对运行中的容器做快照,就能把当前状态保存为新的本地镜像。这不是构建镜像的推荐方式(应优先用 Dockerfile),但适合快速保存调试环境、临时修改或学习理解镜像分层机制。
准备一个正在运行的容器
必须基于某个基础镜像启动一个容器,并让它保持运行状态,才能对其做提交。比如:
- 启动一个 Ubuntu 容器并交互式进入:
docker run -it ubuntu:22.04 /bin/bash - 在容器内安装软件、修改配置、创建文件(例如执行
apt update && apt install -y curl) - 保持该 shell 不退出——此时容器处于运行中(
docker ps能看到)
执行 commit 命令保存为新镜像
在宿主机终端中,使用 docker commit 把容器当前状态固化成镜像:
- 基本语法:
docker commit [选项] [:] - 示例:
docker commit -m "install curl" -a "me@example.com" 1a2b3c ubuntu-with-curl:latest -
-m添加提交信息,-a指定作者,这两项非必需但建议加上,便于追溯 - 如果不指定仓库名和标签,默认生成类似
sha256:xxx的无名镜像,不易管理
验证和使用新镜像
提交完成后,用 docker images 查看是否成功生成新镜像:
- 能看到
ubuntu-with-curl这个镜像,标签为latest - 可以立即运行:
docker run --rm -it ubuntu-with-curl:latest curl --version,确认刚才装的curl确实存在 - 注意:该镜像只包含容器当前文件系统变更,不保留运行时参数(如端口映射、环境变量需重新指定)
注意事项和局限性
docker commit 是“快照式”操作,有明显限制:
- 无法记录构建步骤,不可复现,不适合生产部署
- 不会自动清理临时文件(如 apt 缓存、日志),镜像体积可能偏大
- 容器若以
--rm启动,退出后自动删除,无法 commit - 不支持多阶段构建、ARG、COPY 等 Dockerfile 特性











