docker commit可将容器当前文件系统状态(如软件、配置、文件)固化为新镜像,仅保存磁盘快照,不包含进程、内存或网络状态;适用于调试、救急和教学,但因不可复现,不推荐用于正式交付。

直接用 docker commit 就能把容器当前的文件系统状态(比如装的软件、改的配置、新增的文件)固化成一个新镜像。它不保存进程、内存或网络状态,只拍“磁盘快照”,适合调试、救急或教学,但不适合正式交付。
确认容器状态再动手
先运行 docker ps -a 找到目标容器的 ID 或名字。容器可以运行中,也可以已停止——提交时只捕获已写入磁盘的内容,不包含内存数据。
- 推荐先
docker exec -it bash进去检查:路径对不对、配置是否生效、文件内容是否正确 - 删掉临时密码、注释掉配置里的密钥、清空日志和缓存目录,避免敏感信息被固化
- 记下容器名(如
my-app),后面命令要用
执行 commit 命令并带上关键信息
最简写法是 docker commit my-app my-app:v1,但建议加说明和作者,方便后续追溯:
-
-m "Add Redis client and custom config":一句话说清改了什么 -
-a "dev-team@company.com":标明责任人 -
--change 'CMD ["python", "app.py"]':覆盖启动命令,避免沿用原镜像默认行为 -
-p参数可选:提交前自动暂停容器,提升一致性(尤其对频繁写入的服务)
验证新镜像是否可用
提交后立即验证,别等要用时才发现问题:
- 运行
docker images,确认新镜像出现在列表里 - 快速起一个实例:
docker run -d -p 8080:80 --name test-new my-app:v1 - 访问
http://localhost:8080看自定义内容是否生效 - 用
docker inspect检查 Author、Comment、Cmd 等元数据是否写入正确
后续导出或迁移镜像
如果需要把镜像传到其他机器,可以用 docker save 打包:
-
docker save -o my-app-v1.tar my-app:v1导出为 tar 文件 - 用
scp或其他方式传输后,在目标机运行docker load -i my-app-v1.tar加载 - 注意:
docker commit不记录操作过程,生产环境应优先用 Dockerfile 构建,保证可复现性











