如何解决docker commit后镜像越来越大问题
解决docker commit后镜像越来越大问题
在一些情况下,需要将容器直接打包为镜像。不想在Dockerfile中编写一行行代码。
但是使用:
docker commit -m="提交信息" -a="作者信息" 容器名/容器ID 提交后的镜像名:Tag
会导致镜像越来越大。10G的镜像经过4次commit就变成100G。
我们可以通过:docker system df -v,在【Containers space usage:】中查看容器的大小
虽然显示只有10G,但是commit后会非常大。
所以在此找到2种方法:
方法1
直接打包容器,然后import为镜像img1
docker export -o img.tar 容器ID docker import img.tar img1:20221011123412
方法2
将容器内根目录所有文件压缩。传到容器外,再import为镜像img1
# 第一步:压缩 sudo tar --exclude=./proc --exclude=./sys --exclude=./img.tar -cvf img.tar ./ 第二步:传出容器 docker cp 容器ID:img.tar ./ 第三步:import为镜像 cat img.tar | sudo docker import - img:202201010101
注意压缩时会提醒权限问题【tar: Exiting with failure status due to previous errors】,导致压缩报错。
原因是:
- proc 、sys的部分文件是没有权限的。而tar --exclude=./proc 虽然是跳过proc,但是注意绝对/相对路径文件。
- 否则还是压缩/proc,还会报错。
综上对比,还是方法1比较好用。不要再用方法2了。
总结的图:

不过使用上边打好的镜像,在本机ocker run运行OK,在其他设备就报错:
docker: Error response from daemon: failed to create shim: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:385: applying cgroup configuration for process caused: Failed to activate service 'org.freedesktop.systemd1': timed out (service_start_timeout=25000ms): unknown.
有文章说是设备内存不足。。。。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Docker镜像修改hosts及dockerfile修改hosts文件的实现方式
这篇文章主要介绍了Docker镜像修改hosts及dockerfile修改hosts文件的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2025-04-04
SpringCloud基于Docker和Docker-Compose的项目部署过程
本文介绍了如何卸载旧版本Docker、更新系统、安装Docker及其依赖,并设置国内镜像源以加快下载速度,详细说明了如何安装Docker Compose、配置镜像加速器,并展示了如何使用Docker Compose部署SpringCloud项目,提供了更新和重启容器的方法2024-10-10
在docker容器中elasticsearch的导入导出方式
文章详细介绍了如何使用Docker拉取Elasticsearch镜像,并导出和导入索引数据,还讨论了在Elasticsearch Head中解决请求头显示不正确的问题,包括从容器中复制文件、编辑文件和将文件回传到容器2025-11-11


最新评论