Docker data-root迁移完整指南:停服复制改配置启动清理
如果你接手过一台跑了一段时间的服务器多半会遇到“明明没装多少东西系统盘却莫名其妙满了”的情况。打开df -h一看/var/lib/docker已经吃掉了几十 GB镜像、容器层、命名卷和日志全堆在容量有限的分区里而旁边那块大容量数据盘却空空如也。Docker 默认把数据放在>docker info --format {{.DockerRootDir}}同时确认存储驱动docker info --format {{.Driver}}绝大多数现代环境输出是overlay2如果你看到vfs说明存储开销会异常大迁移后建议重新考虑配置。还要注意rootless 模式下 Docker 数据根目录通常不在/var/lib/docker而在用户目录下比如~/.local/share/docker。本文主要面向传统的 rootful 模式但在动手前先确认总没错。2.2 统计磁盘占用选对目标盘确认当前路径后要看数据量到底有多大sudo du -sh /var/lib/docker sudo du -sh /var/lib/docker/* | sort -h然后看目标位置的空间是否充足df -h /data df -h /var/lib/docker目标盘剩余空间最好大于当前 Docker 数据量的 1.2 倍。为什么留 20% 余量因为 Docker 运行期间还会继续产生容器日志、镜像临时层和构建缓存迁移完成初期你不会立刻清理所有旧数据目标盘如果刚好卡在临界值几天后又会告警。除了空间还要确认目标盘的文件系统。一般用 ext4 或 xfs 就足够稳定尽量避免把 Docker>docker ps -aq /backup/container-list.txt docker volume ls -q /backup/volume-list.txt如果容器里有数据库这类强一致性的服务最好让应用先优雅停服不要只依赖systemctl stop docker去强停。数据量几十 GB 时rsync 复制可能需要几分钟到几十分钟上百 GB 就更要预留足够时间。3. 完整迁移实操停服—复制—改配置—启动—清理3.1 停止 Docker 并防止服务被自动拉起很多人只执行sudo systemctl stop docker然后开始复制结果复制到一半发现 Docker 又活了。原因是 systemd 环境下还有docker.socket单元只要有客户端调用 Docker 命令socket 可能触发守护进程自动启动。稳妥的做法是同时停掉 service 和 socketsudo systemctl stop docker.service docker.socket停完以后检查确认真没有 dockerd 进程残留pgrep -a dockerd || echo dockerd is stopped这里要强调不要用kill -9强行杀掉 dockerd。强制终止可能导致容器的写层、镜像元数据没有刷盘在某些存储驱动下会留下需要人工修复的 overlay 状态。正常systemctl stop docker会等待容器进入停止状态数据一致性更有保障。3.2 用 rsync 完整复制数据参数要理解清楚创建目标目录sudo mkdir -p /data/docker然后执行复制sudo rsync -aHAXS --numeric-ids \ /var/lib/docker/ \ /data/docker/这几个参数不是随手写的每个都对应 Docker 数据目录的特殊性-a归档模式保留权限、属主、时间戳和符号链接-H保留硬链接。overlay2 的镜像层之间广泛使用硬链接如果丢了这个参数复制出来的镜像层可能物理上变成多份空间占用翻倍-A和-X保留 ACL 和扩展属性SELinux 环境下尤其需要-S稀疏文件处理避免日志、容器可写层里的空洞文件复制后占满额外空间--numeric-ids按数字 UID/GID 保留属主而不是按用户名翻译避免目标机器用户名映射不一致导致权限错乱。这里最容易犯的错误是漏掉源路径末尾的/。rsync -a /var/lib/docker /data/docker会把/var/lib/docker作为子目录放到/data/docker里面最终得到/data/docker/var/lib/docker只有写成/var/lib/docker/才会把目录内容直接复制到/data/docker下。复制完成后可以再跑一遍同样的 rsync 增量同步并把输出打开sudo rsync -aHAXS --numeric-ids --itemize-changes \ /var/lib/docker/ \ /data/docker/如果没有任何f或类似输出说明源和目标已经一致。增量同步在迁移场景下是好习惯第一次复制后有小文件或元数据变化第二遍能补上。3.3 修改 daemon.json把>{ data-root: /data/docker, log-driver: json-file, log-opts: { max-size: 10m, max-file: 3 } }提交前检查 JSON 语法不要出现多余逗号字段名是>systemctl cat docker看到包含--data-root的内容就说明存在参数冲突。3.4 启动 Docker验证迁移结果配置完启动服务sudo systemctl daemon-reload sudo systemctl start docker确认新路径已经生效docker info --format {{.DockerRootDir}}如果输出/data/docker说明>sudo mv /var/lib/docker /var/lib/docker.old-$(date %Y%m%d.%H%M)保留旧路径的好处是万一新目录有问题改回daemon.json里的>sudo rm -rf /var/lib/docker.old-*这里要注意旧目录没有删除前系统盘空间并不会释放。如果系统盘已经 90% 饱和重命名只是让/var/lib/docker这个路径空出来但旧目录仍占着同样的空间。这种情况就必须在业务验证后尽快删除旧数据或者先备份到目标盘再删。4. 容易踩坑的细节容器、卷、镜像与日志4.1 运行中的容器数据真的不会丢吗迁移期间 Docker 已经停止容器进程被强制或正常终止。只要systemctl stop docker正常完成容器写层已经落盘rsync 复制的是静止状态的数据一致性没有问题。真正的风险点是那些设置了restart: always的容器。Docker 守护进程启动后这类容器会自动拉起如果你还没准备好它们可能在验证阶段突然开始跑业务、写数据。更好的做法是在停 Docker 之前先把关键容器的重启策略临时关掉docker update --restartno 容器名等全部验证完了再docker start并恢复原来的重启策略。我在实际迁移中见过因为没关这个策略Docker 一启动数据库容器就自动拉起结果另一套备份任务也同时触发磁盘压力瞬间飙升迁移窗口被拉长。所以“停机前先处理 restart policy”这话很值得刻在脑子里。4.2 命名卷与 bind mount不是所有数据都在>sudo ls /data/docker sudo ls /data/docker/var/lib/docker如果看到这种嵌套就说明复制路径搞错了。第三步查权限rsync -a能保留属主但如果目标目录创建时用了错误的所有者Docker 可能无法读取元数据。用ls -ld /data/docker确认属主是root:root。5.2 磁盘空间迟迟不释放最常见的原因就是旧目录还在。mv重命名后旧数据依然占据系统盘必须等确认无误后删除。如果删除了旧目录系统盘却还是满的检查是否有进程占用了已删除文件的句柄lsof L1 | grep deleted如果看到dockerd或容器进程还在旧路径上打开文件删掉的文件不会真正释放空间需要重启相关进程。另外别忘了排查宿主日志和临时目录。可以用du -h -x -d1 /从根开始逐层看找出真正的空间大户。5.3 daemon.json 配置导致服务起不来daemon.json 出问题最典型的表现是journalctl -u docker里出现 JSON 解析错误比如invalid character } looking for beginning of object key string。这多半是手写配置时逗号位置不对。另一个常见坑是>sudo restorecon -R /data/dockerrootless Docker 的迁移思路类似但涉及 systemd user 服务和路径下的~/.local/share/docker并且不能直接用systemctl stop docker这种系统级命令需要单独写一篇。普通场景不需要过度担心但至少要意识到“rootful 和 rootless 是两个世界”。6. 长期运维建议与自动化思路6.1 在新机器初始化阶段就规划好数据盘迁移一次后你就明白与其等系统盘报警再折腾不如新机器初始化时直接把 Docker 数据目录放到独立数据盘上。两种方式一种是把数据盘直接挂载到/var/lib/docker另一种是保留/var/lib/docker默认路径在 daemon.json 里设置>docker system df df -h /data/docker df -h / du -sh /var/lib/docker /data/docker 2/dev/null重点不是看当前用了多少而是看增长趋势。如果docker system df里 Build Cache 一直在涨可以定期docker builder prune -f如果容器日志越来越大就去检查log-opts是否生效。清理镜像缓存用docker image prune -a时要谨慎-a会删除所有未被容器引用的镜像很多补救依赖旧镜像回到稳定版本删了就拉不回来了。我个人的原则是镜像可以按需清理但卷数据不要随意docker volume prune脏数据比多占点空间可怕得多。6.3 把迁移封装成可复用的检查脚本迁移本身是一次性动作但如果你经常帮团队承接新服务器把流程脚本化会很有价值。一个最小化脚本至少应该包含检查当前>

相关新闻

卸载安全软件后电脑黑屏进不去系统先查显卡驱动

卸载安全软件后电脑黑屏进不去系统先查显卡驱动

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 13:19:02 阅读更多 →
AIGC视频生成实战指南:从扩散模型到生产管线全解析

AIGC视频生成实战指南:从扩散模型到生产管线全解析

从第一次看到文生图模型把一段文字变成精致画面,我就隐约觉得视频会是下一个突破口。等到真正上手跑通几段AI生成视频,再回头看这个赛道,我的判断变成了一句话:AIGC视频不是AIGC的一个分支,而是AIGC领域真正意义上的未…

2026/10/19 13:17:58 阅读更多 →
STM32F407工业级Modbus RTU通信栈:支持字节序可配CRC与三相电表稳定接入

STM32F407工业级Modbus RTU通信栈:支持字节序可配CRC与三相电表稳定接入

简介:本资源是一套基于STM32F407ZGT6微控制器实现Modbus RTU通信协议的完整嵌入式开发工程,面向嵌入式初学者、工业自动化开发者及高校电类专业实践者,解决智能电表数据可靠读取与传输中的协议解析、硬件接口配置及CRC-16校验等核心问题。压缩…

2026/10/19 13:17:58 阅读更多 →

最新新闻

基于YOLOv8/YOLOv5的田间杂草检测系统:从数据集构建到UI部署完整复盘

基于YOLOv8/YOLOv5的田间杂草检测系统:从数据集构建到UI部署完整复盘

田间杂草检测这种项目,很多人第一反应是找个开源模型跑一下,能出框就算完事。但真正做过一次田间实测的人都知道,训练集里mAP刷到0.95,拉到地里一测,漏检的、误检的能让你怀疑人生。这个基于YOLOv8/YOLOv7/YOLOv6/YOLO…

2026/10/19 13:55:57 阅读更多 →
Open Code Review:把代码评审从形式主义变成团队成长引擎

Open Code Review:把代码评审从形式主义变成团队成长引擎

1. 被误解的Code Review:为什么你们的评审总在走形式1.1 "批作业式"评审是怎么诞生的做过几年研发的人,大概率都见过这种场景:一个PR挂着三四天没人点开,临到要上线了,群里喊一嗓子,才有两三个人…

2026/10/19 13:55:57 阅读更多 →
从零搭建智能体:任务拆解、工具调用与流程编排的实践复盘

从零搭建智能体:任务拆解、工具调用与流程编排的实践复盘

第一次看到那行日志时,我确实忍不住喊了一声“哇塞”。不是因为智能体写出了多惊艳的文字,而是它干了一件过去普通AI助手绝不会主动做的事:把自己要完成的任务拆成了七个子任务,调用了两个外部工具,发现第一次生成结果…

2026/10/19 13:55:57 阅读更多 →
开源代码审查助手open-code-review:规则驱动与增量分析实战

开源代码审查助手open-code-review:规则驱动与增量分析实战

写代码这么多年,有个问题一直横在团队协作面前:代码审查。合代码之前让同事看一眼,出发点是好的,但实际跑起来往往变味。要么变成形式主义的“已阅”,要么变成冗长的辩论会,更常见的是——审查工具倒是上了…

2026/10/19 13:55:57 阅读更多 →
WooCommerce插件SQL注入漏洞分析:从WowStore CVE-2026-2579看安全防护

WooCommerce插件SQL注入漏洞分析:从WowStore CVE-2026-2579看安全防护

最近在审计一批WooCommerce生态插件的时候,又碰上了一类老面孔——SQL注入。这次的“主角”是WowStore,一款专门做店铺搭建和商品展示块的WordPress插件,对应的编号是CVE-2026-2579。看到这个编号第一反应倒不是意外,因为WooComme…

2026/10/19 13:55:57 阅读更多 →
基于LLM的叙事Agent:多模块架构实现稳定长文故事生成

基于LLM的叙事Agent:多模块架构实现稳定长文故事生成

先把话说清楚:这篇东西不是那种"拿着ChatGPT随便聊两句、把对话整理成一个故事"的玩具教程。我要聊的是,怎么基于LLM设计一个有真实叙事能力的AI Agent,让它能稳定产出多章回、有因果推进、有人物弧光的故事,而不是一写…

2026/10/19 13:54:57 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →