首页 > 其他分享 >解决 Docker 的 DeviceMapper 占用空间过大

解决 Docker 的 DeviceMapper 占用空间过大

时间:2022-12-23 12:44:31浏览次数:62  
标签:opt dm DeviceMapper -- 占用 runc docker Docker

某虚拟机运行容器半年后,磁盘空间报警,使用率超过百分之九十。经查后发现为 Docker 的 DeviceMapper 占用空间过大。

概述

DeviceMapper 为容器的镜像和运行过程的缓存存放目录,这并不是一个文件夹,而是一个虚拟块设备。

解决

先将当前运行的容器导出为镜像(若已经对原有镜像进行过修改,否则无需导出,只需知道原镜像地址即可),然后停止容器服务。

# systemctl stop docker

修改容器初始化文件

# vim /lib/systemd/system/docker.service
小贴士:此文件位置可能不同,可在 SystemD 命令中查看到具体位置。

找到初始化字段

ExecStart=/usr/bin/dockerd-current \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY\
          $REGISTRIES

修改为

ExecStart=/usr/bin/dockerd-current \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
          --storage-opt dm.loopdatasize=8G \
          --storage-opt dm.loopmetadatasize=4G \
          --storage-opt dm.basesize=8G \
          $OPTIONS \
          $DOCKER_STORAGE_OPTIONS \
          $DOCKER_NETWORK_OPTIONS \
          $ADD_REGISTRY \
          $BLOCK_REGISTRY \
          $INSECURE_REGISTRY\
          $REGISTRIES

实际加入以下几行

          --storage-opt dm.loopdatasize=8G \
          --storage-opt dm.loopmetadatasize=4G \
          --storage-opt dm.basesize=8G \
小贴士:设置 DeviceMapper 的 data 为 8G,metadata 为 4G,镜像的大小不能大于 8G。

删除旧 DeviceMapper 并重建

# rm -rf /var/lib/docker 
# mkdir -p /var/lib/docker/devicemapper/devicemapper/ 
# dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/data bs=1M count=0 seek=8192
# dd if=/dev/zero of=/var/lib/docker/devicemapper/devicemapper/metadata bs=1M count=0 seek=4096

重新加载配置

# systemctl daemon-reload 

重启容器服务

# systemctl start docker

查看容器信息

# docker info

参考链接

标签:opt,dm,DeviceMapper,--,占用,runc,docker,Docker
From: https://www.cnblogs.com/xzlive/p/17000432.html

相关文章

  • Dockerfile介绍及常用保留指令
    从本文开始,咱们将介绍docker的另外一个技术点:dockerfile.我们来看看DockerFile相关的知识点,我们将怎么学习?1:DockerFile是什么?2:DockerFile构建过程解析3:常用的保留字指令4:案......
  • 【VMware NSX-T】在vCenter内直接将Manager设备删除后,ESXi上还遗留N-VDS交换机及网卡
    由于之前在实验平台安装了NSX-T的测试环境,但是由于太忙了没怎么测试,后来实验环境出了点小问题,索性就将上面所有虚拟机给清空了。但是没想到上面遗留了NSX-T上创建的N-VDS交......
  • docker中mysql配置主从
    创建文件夹&编辑my.cnf内容mkdir-p/opt/docker/mysql-8.0/master/cnfmkdir-p/opt/docker/mysql-8.0/master/datavim/opt/docker/mysql-8.0/master/cnf/mysql.cnf[......
  • docker 安装 postgres 15.1
    docker拉取镜像:dockerpullpostgres:15.1创建文件夹,以及启动images创建文件夹:mkdir-p/opt/docker/postgresdockerrun--namepostgres\-ePOSTGRES_PASS......
  • Dockerfile介绍及常用保留指令
    从本文开始,咱们将介绍docker的另外一个技术点:dockerfile.我们来看看DockerFile相关的知识点,我们将怎么学习?1:DockerFile是什么?2:DockerFile构建过程解析3:常用的保留字指令......
  • Docker 架构演进之路
    转载:https://developer.aliyun.com/article/673009前言Docker已经推出了5年,在这5年中它极大的改变了互联网产品的架构,推进了新的产品开发、测试和运维方法。但是它自身也在......
  • Jenkins+Docker 一键自动化部署 SpringBoot 项目
    Jenkins+Docker一键自动化部署SpringBoot项目 本文章实现最简单全面的Jenkins+docker+springboot 一键自动部署项目,步骤齐全,少走坑路。环境:centos7+git(git......
  • Docker+Jenkins+Gitee+Maven构建后台jar包后配置SSH传送到服务器并执行指定命令
    场景Docker+Jenkins+Gitee+Maven项目配置jdk、maven、gitee等拉取代码并自动构建以及遇到的那些坑:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/12839905......
  • Ubuntu:Docker 容器操作
    创建容器1.dockerrun[option]镜像名[向启动容器中传入的命令]常用可选说明-i表示以“交互模式”运行容器-t表示容器启动后会进入其命令行。加入这两个参数......
  • Ubuntu:Docker启动与停止
    安装完成Docker后,默认已经启动了docker服务,如需手动控制docker服务的启停,可执行如下命令启动dockersudoservicedockerstart停止dockersudoservicedockerstop......