如何解决docker commit后镜像越来越大问题

 更新时间:2025年03月07日 09:47:20   作者:weixin_38621239  
解决Docker Commit后镜像变大问题的方法:方法1直接打包容器并导入为镜像;方法2将容器根目录文件压缩后导入为镜像,方法1更优,在其他设备运行时可能出现内存不足错误

解决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的安装及docker-compose详解

    docker的安装及docker-compose详解

    Docker是一种轻量级的容器技术,可以帮助开发者更加方便地打包、发布和管理应用程序,在Linux系统上安装Docker非常容易,这篇文章主要介绍了docker的安装及docker-compose,需要的朋友可以参考下
    2024-05-05
  • 详解利用ELK搭建Docker容器化应用日志中心

    详解利用ELK搭建Docker容器化应用日志中心

    这篇文章主要介绍了详解利用ELK搭建Docker容器化应用日志中心,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • 常用的8个应用和中间件的Docker运行示例详解

    常用的8个应用和中间件的Docker运行示例详解

    Portainer是一个轻量级的管理 UI ,可让你轻松管理不同的 Docker 环境(Docker 主机或 Swarm 群集),这篇文章主要介绍了常用的8个应用和中间件的Docker运行示例,需要的朋友可以参考下
    2024-03-03
  • Docker数据存储之Volumes详解

    Docker数据存储之Volumes详解

    今天小编就为大家分享一篇关于Docker数据存储之Volumes详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • docker容器中登陆并操作postgresql的实现

    docker容器中登陆并操作postgresql的实现

    本文主要介绍了docker容器中登陆并操作postgresql的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-02-02
  • Docker网络配置的三种方式

    Docker网络配置的三种方式

    在使用Docker时,网络通信是必不可少的,它可以使不同的Docker容器相互通信,也可以将容器与外部网络连接起来,本文给大家介绍了Docker网络配置的三种方式,文中通过图文给大家讲解非常详细,需要的朋友可以参考下
    2024-01-01
  • docker之创建MariaDB镜像的方法

    docker之创建MariaDB镜像的方法

    这篇文章主要介绍了docker之创建MariaDB镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Docker安装Nginx并部署及MySQL容器构建全过程

    Docker安装Nginx并部署及MySQL容器构建全过程

    众所周知Docker是一种容器化技术,可以用来快速部署和管理应用程序,这篇文章主要给大家介绍了关于Docker安装Nginx并部署及MySQL容器构建的相关资料,需要的朋友可以参考下
    2024-02-02
  • docker容器无法stop的解决办法

    docker容器无法stop的解决办法

    在本篇文章里小编给大家整理了关于docker容器无法stop的解决办法,有需要的朋友们可以参考下。
    2020-03-03
  • Docker中Mysql容器无法停止无法删除问题

    Docker中Mysql容器无法停止无法删除问题

    这篇文章主要介绍了Docker中Mysql容器无法停止无法删除问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03

最新评论