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

解决 Docker 的 DeviceMapper 占用空间过大

时间:2023-05-10 10:14:12浏览次数:40  
标签:opt dm DeviceMapper -- 占用 current runc docker Docker

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

概述

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

解决

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

# systemctl stop docker

修改容器初始化文件

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

找到初始化字段

1 2 3 4 5 6 7 8 9 10 11 12 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

修改为

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 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

实际加入以下几行

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

删除旧 DeviceMapper 并重建

1 2 3 4 # 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,--,占用,current,runc,docker,Docker
From: https://www.cnblogs.com/gaoyuechen/p/17387133.html

相关文章

  • 解决CentOS 7出现docker-compose: command not found
    解决CentOS7出现docker-compose:commandnotfound1.安装docker-compose既然使用了docker-compose那自然得安装了在GitHub上拉取过慢,建议在国内源DaoCloud中拉取:curl-Lhttps://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-`uname-s`-`unam......
  • 安装docker和docker-compose的shell脚本(Centos7版本)
    在执行脚本之前,我们需要先做两件事:避免防火墙与docker产生冲突,应先关闭防火墙。shell#去掉防火墙的开机自启动systemctldisablefirewalld.service#关闭防火墙systemctlstopfirewalld.service国内拉取dockerhub中的镜像速度一般都很慢,现在有一种方法可以提高......
  • [转]解决80端口被PID=4服务占用的问题,三个思路
    引自:https://blog.csdn.net/weixin_45866737/article/details/122594326前言后端在为服务配置端口时,我们可以配置80端口。因为浏览网页服务默认的端口号都是80,因此只需输入网址即可,不用输入“:80”了。Nginx的默认端口也是80。不过,有时候,80端口会被占用,有可能是被ntoskrnl.exe......
  • Docker部署网易云音乐解灰无版权VIP音乐播放下载
    若服务器已搭建好Docker,则跳过输入搭建docker命令,回车执行,耐心等待安装完成curl-fsSLhttps://get.docker.com|bash-sdocker--mirrorAliyun执行一键部署命令dockerrun-dit\ -eENABLE_FLAC=true\ -eENABLE_LOCAL_VIP=svip\ -eBLOCK_ADS=true\ -eSEARCH_A......
  • linux之docker安装RocketMQ
    一、创建namesrv容器dockerpullrocketmqinc/rocketmqmkdir-p/docker/rocketmq/data/namesrv/logs/docker/rocketmq/data/namesrv/storedockerrun-d\--restart=always\--namermqnamesrv\-p9876:9876\-v/docker/rocketmq/data/namesrv/logs:/root/lo......
  • Docker CLI docker compose rm常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • 编写Dockerfile文件
    镜像是容器的基础,容器基于镜像定义的内容来运行。镜像是多层存储,每一层是前一层基础上进行的修改。定制镜像时,一般使用Dockerfile来完成。Dockerfile是一个文本文件,其内包含了一条条的指令,每一条指令构建镜像的其中一层,因此每一条指令的内容,就是描述该层应该如何构建。Dockerfil......
  • docker 部署 Prometheus
    1、部署node_exporter数据采集dockerrun-d--name=node-exporter\--restart=always\-p9100:9100\-v"/proc:/host/proc:ro"\-v"/sys:/host/sys:ro"\-v"/:/rootfs:ro"\prom/node-exporter访问:http:/......
  • Docker中部署mongodb
    1、拉取镜像dockerpullmongo:4.42、创建mongo数据持久化目录(防止容器被删数据库也被删了)mkdir-p/xx/xx/xx3、运行mongodbdockerrun-itd--namemongo-v/xx/xx/xx:/data/db-p27017:27017mongo:4.4--auth-v:将宿主机的/xx/xx/xx映射到容器的/data/db目录......
  • docker命令
    环境查看系统内核3.10以上:uname-rCat/etc/os-release安装docker社区版:yuminstalldocker-ce启动docker:systemctlstartdocker基本命令:dockerversion#显示docker版本信息dockerinfo#显示docker的系统信息,包括镜像和容器数量、查看仓库地址dockercomm--hel......