docker commit 可将运行或停止容器保存为新镜像,适合临时修改,但正式环境应使用 dockerfile 保证可复现性;需先检查容器状态、清理敏感信息,再执行命令提交并验证。

直接用 docker commit 可以把正在运行或已停止的容器当前状态(包括文件改动、配置变更等)保存为一个新的镜像。它适合快速保存临时修改,但不是推荐的长期构建方式——正式环境建议用 Dockerfile 保证可复现性。
确认目标容器并做好准备
先用 docker ps -a 查看所有容器,找到你想保存的容器 ID 或名字。确保该容器中已完成你想要保留的操作(比如安装了软件、修改了配置文件、下载了数据等)。注意:容器不必正在运行,停止状态也能提交,但运行中提交会捕获那一刻的内存外状态(如已写入磁盘的文件)。
- 推荐先
docker exec -it bash进去检查改动是否符合预期 - 避免提交含敏感信息的容器(如密码明文、密钥文件),提交前应清理
- 记下容器 ID 或名字,后续命令要用到
执行 docker commit 命令
基本语法是:docker commit [选项] [:]。最简形式只需容器名和新镜像名:
docker commit my-nginx nginx-with-custom-index:latest- 加说明和作者信息更规范:
docker commit -m "Added custom index.html" -a "Your Name" my-nginx nginx-custom:v1 - 若想指定新镜像的启动命令,可用
-c参数,例如:-c 'CMD ["nginx", "-g", "daemon off;"]'
验证新镜像是否可用
提交完成后,运行 docker images 查看是否出现新镜像。然后可以立即测试:
- 用
docker run -d -p 8080:80 --name test-new nginx-custom:v1启动新镜像 - 访问
http://localhost:8080确认自定义内容生效 - 用
docker inspect查看元数据(如 Author、Comment、Cmd)是否正确写入
注意事项与替代建议
docker commit 是快照式操作,不记录过程,难以追溯和协作。生产中应优先使用 Dockerfile:
- 每次改动都通过
RUN、COPY等指令显式声明,便于审查和 CI/CD 集成 - 镜像分层更清晰,复用基础层,节省空间和拉取时间
- 若已用 commit 生成了镜像,可用
docker history查看层信息,辅助反推 Dockerfile 结构










