详解docker容器硬盘动态扩容

发布时间 - 2026-01-11 00:41:50    点击率:

扩容容器

默认来说,如果你使用 Device Mapper 的存储插件,所有的镜像和容器是从一个初始 10G 的文件系统中创建的。让我们来看看如何从一个更大的文件系统中创建一个容器。

 首先,我们用 Ubuntu 的镜像来创建我们的容器。我们不需要在这个容器里运行任何东西,只需要这个文件(或者关联的文件系统)存在。为了演示,我们会在这个容器里运行 df ,来看一下根文件系统的大小。

 $ docker run -d ubuntu df -h /
4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

由于需要修改 Device Mapper 管理中的一些卷的信息,我们现在用 root 的身份来运行一些命令。所有以#开头的命令都必须以 root 身份来执行。只要能访问 Docker 的 Socket 服务,你也可以用普通用户的身份来执行其他的命令(以$开头)。

 让我们看一下 /dev/mapper ,那里应该有一个对应容器文件系统的符号链接,以 docker-X:Y-Z- 开头:

 # ls -l /dev/mapper/docker-*-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603
lrwxrwxrwx 1 root root 7 Jan 31 21:04 /dev/mapper/docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603 -> ../dm-8

注意记住那个全名,我们未来会用到。

 开始扩容:

1、首先让我们来看一下当前卷的信息表:

# dmsetup table docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603
0 20971520 thin 254:0 7

第二个数字是设备的大小,表示有多少个 512-bytes 的扇区. 这个值略高于 10GB 的大小。

2、我们来计算一下一个 42GB 的卷需要多少扇区,

  $ echo $((42*1024*1024*1024/512))
88080384

精简快照目标的一个神奇的特点是它不会限制卷的大小。当你创建它的时候,一个精简的卷使用0个块,当你开始往块里面写入的时候,它们会从共用的块池中进行分配。你可以写0个块,或者是10亿个块,这个和精简快照目标没关系。文件系统的大小只和 Device Mapper 表有关系。 

觉得困惑?不要担心。我们只是需要装载一个新的表,这个完全和之前的是一样的,但是有更多的扇区。仅此而已。

3、旧表是 0 20971520 thin 254:0 7 。我们会改变第二个数字,要非常小心保持其他的值不变。你的卷可能不是 7 ,所以要使用正确的值!

这样操作:

复制代码 代码如下:
# echo 0 88080384 thin 254:0 7 | dmsetup load docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

4、现在如果我们再次检查表的信息,步骤和前面一样。首先使用下面的命令激活新表:

复制代码 代码如下:
# dmsetup resume docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

执行完命令后,再次检查一下表的信息,发现它会使用新的扇区数量。

5、我们已经调整了块设备的大小,但是我们仍然需要调整文件系统的大小,我们使用 xfs_growfs 来操作:

(网上很多说到的resize2fs后来看到xfs方式的使用dumpe2fs,该命令在16.04下可能出现文件正在使用或者找不到超级块的错误,)

复制代码 代码如下:
# xfs_growfs docker-0:37-1471009-4ab0bdde0a0dd663d35993e401055ee0a66c63892ba960680b3386938bda3603

docker动态容器扩容成功。

 6、停止该容器后,无法重新启动

当容器扩容之后,由于dm认为设备块大小仍然为之前设置的初始大小,所以会发生无法起启动的情况,这时只要重新操作即可。

$ docker start test#必须要先启动一下,让其生成dm文件才能修改
#此时会报错,不要理会,执行以下操作即可
$ echo 0 41943040 thin 252:0 9 | dmsetup load docker-253:1-131179-a835d492b6864a13eb11eddd17c3cabf5226f20bc01fbfe90964d80112a0df69
$ dmsetup resume docker-253:1-131179-a835d492b6864a13eb11eddd17c3cabf5226f20bc01fbfe90964d80112a0df69

这是一bug

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# docker容器动态扩容  # docker  # 容器扩容  # 动态扩容  # Docker 技巧之删除Docker容器和镜像  # Docker容器通过独立IP暴露给局域网的方法  # Docker容器中运行nginx  # 详解Docker 容器互联方法  # 详解docker容器间通信的一种方法  # Docker定制容器镜像的2种方法(推荐)  # docker容器跨服务器的迁移的方法  # 使用Grafana 展示Docker容器的监控图表并设置邮件报警规则(图解)  # Docker 中的容器完全解析  # 文件系统  # 让我们  # 扇区  # 当你  # 其他的  # 第二个  # 镜像  # 这是  # 如果你  # 容器里  # 在这个  # 你可以  # 不需要  # 你也  # 找不到  # 可以用  # 更大  # 会在  # 说到  # 是从 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)  Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何在建站宝盒中设置产品搜索功能?  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在Windows服务器上快速搭建网站?  安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  北京专业网站制作设计师招聘,北京白云观官方网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  无锡营销型网站制作公司,无锡网选车牌流程?  韩国服务器如何优化跨境访问实现高效连接?  湖南网站制作公司,湖南上善若水科技有限公司做什么的?  英语简历制作免费网站推荐,如何将简历翻译成英文?  浅析上传头像示例及其注意事项  香港服务器租用费用高吗?如何避免常见误区?  Android仿QQ列表左滑删除操作  音响网站制作视频教程,隆霸音响官方网站?  Laravel如何使用Passport实现OAuth2?(完整配置步骤)  Android 常见的图片加载框架详细介绍  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  iOS验证手机号的正则表达式  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  JavaScript如何操作视频_媒体API怎么控制播放  如何快速配置高效服务器建站软件?  清除minerd进程的简单方法  Laravel 419 page expired怎么解决_Laravel CSRF令牌过期处理  黑客入侵网站服务器的常见手法有哪些?  如何在企业微信快速生成手机电脑官网?  Laravel如何处理CORS跨域请求?(配置示例)  Java类加载基本过程详细介绍  如何快速完成中国万网建站详细流程?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  高端建站三要素:定制模板、企业官网与响应式设计优化  手机网站制作与建设方案,手机网站如何建设?  Android GridView 滑动条设置一直显示状态(推荐)  Android自定义listview布局实现上拉加载下拉刷新功能  如何快速生成ASP一键建站模板并优化安全性?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  如何快速生成凡客建站的专业级图册?  如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  HTML透明颜色代码怎么让下拉菜单透明_下拉菜单透明背景指南【技巧】  怎样使用JSON进行数据交换_它有什么限制