- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我有一个带有 2 个容器(Jenkins 和 Nexus,都有自己的命名卷)的 docker 环境。我每天都有一个删除未使用的容器和图像的 cron 作业。这工作正常。但问题出在我的设备映射器内部:
du -sh /var/lib/docker/
30G docker/
我可以在我的 docker 文件夹中的每个文件夹:卷(大,但在我的情况下这是正常的):
/var/lib/docker# du -sh volumes/
14G volumes/
容器:
/var/lib/docker# du -sh containers/
3.2M containers/
图片:
/var/lib/docker# du -sh image/
5.8M image/
设备映射器:
/var/lib/docker# du -sh devicemapper/
16G devicemapper/
/var/lib/docker/devicemapper/mnt
为 7.3G/var/lib/docker/devicemapper/devicemapper
是8.1G
docker 信息:
Storage Driver: devicemapper
Pool Name: docker-202:1-xxx-pool
Pool Blocksize: 65.54 kB
Base Device Size: 10.74 GB
Backing Filesystem: ext4
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 5.377 GB
Data Space Total: 107.4 GB
Data Space Available: 28.8 GB
Metadata Space Used: 6.148 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.141 GB
Udev Sync Supported: true
这个空间是什么,我可以在不破坏东西的情况下清理它吗?
最佳答案
Don't use a devicemapper loop file for anything serious ! Docker 对此有很大的警告。
/var/lib/docker/devicemapper/devicemapper
目录包含稀疏循环文件,其中包含 docker 挂载的所有数据。所以你需要使用 lvm 工具来搜索它们并做一些事情。阅读 the remove issues with devicemapper ,他们有点解决了,但也许没有。
我会离开 devicemapper
在可能的情况下或在任何基于 RHEL 的设备上使用 LVM 精简池。如果您无法更改存储驱动程序,则相同的过程至少会清除您无法回收的所有已分配稀疏空间。
更改存储驱动程序需要转储您的 /var/lib/docker
包含所有 docker 数据的目录。有一些方法可以保存其中的一部分,但这涉及到弄乱 Docker 内部。最好提交和导出您想要保留的任何容器或卷,并在更改后导入它们。否则你将有一个全新的、空白的 Docker 安装!
导出数据
停止 Docker
移除 /var/lib/docker
修改 docker 启动以使用新的存储驱动程序。设置--storage-driver=<name>
在 /lib/systemd/system/docker.service
或 /etc/systemd/system/docker.service
或 /etc/default/docker
或 /etc/sysconfig/docker
启动 Docker
导入数据
AUFS 不在主线内核中(而且永远不会),这意味着发行版必须以某种方式主动包含它。对于 Ubuntu,它位于 linux-image-extra
包。
apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
然后将存储驱动程序选项更改为 --storage-driver=aufs
OverlayFS 已经在 Ubuntu 中可用,只需将存储驱动程序更改为 --storage-driver=overlay2
或 --storage-driver=overlay
如果您仍在使用 3.x 内核
我不确定现在这个主意有多好。它不能比循环文件差多少,但是
overlay2
驱动程序非常适合开发人员使用,但尚未考虑生产就绪(例如 Docker Enterprise 不提供支持),但由于 AUFS/内核问题,它正被推为标准驱动程序。
您可以直接使用 LVM 精简池来代替 devicemapper 循环文件。 RHEL 使用 docker-storage-setup
让这一切变得简单随 EPEL docker 包一起分发的实用程序。 Docker have detailed steps for setting up the volumes manually .
--storage-driver=devicemapper \
--storage-opt=dm.thinpooldev=/dev/mapper/docker-thinpool \
--storage-opt dm.use_deferred_removal=true
Docker 17.06+ 支持 managing simple direct-lvm
block device setups for you.
永远不要用完 LVM 卷中的空间。您最终会得到一个无响应的 Docker 守护程序,需要被杀死,然后是仍在使用且难以清理的 LVM 资源。
关于docker - 清理docker环境: devicemapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37672018/
我是 codiva online ide 的开发人员。每次用户运行java程序时,我们都会启动一个新的容器。我们使用 devicemapper 存储驱动程序,因为这是我们能够设置容器大小上限的唯一方法
我有一个带有 2 个容器(Jenkins 和 Nexus,都有自己的命名卷)的 docker 环境。我每天都有一个删除未使用的容器和图像的 cron 作业。这工作正常。但问题出在我的设备映射器内部:
我在存储方面遇到问题,因此删除了docker文件夹( / var / lib / docker )中的许多文件和某些文件。 有没有一种方法可以检查Docker的安装,链接容器和卷,...。 最佳答案
我在 Redhat 上使用 Docker 版本 17.06.0-ce 和 devicemapper 存储。我正在启动一个运行长期服务的容器。容器内的主进程有时会因任何原因而死亡。我收到以下错误消息。
您好,有人知道如何清理 docker devicemapper 文件吗? 我已经清理了所有图像/容器,但设备映射器文件仍然异常大: docker images -a REPOSITORY
Project Atomic 对 Docker 的描述 storage backends描述了 AUFS 和其他存储后端选择之间的技术差异,例如 devicemapper。 AUFS不在上游 Linu
我是一名优秀的程序员,十分优秀!