news 2026/6/12 15:23:09

Docker 存储目录迁移:解决 No space left on device

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 存储目录迁移:解决 No space left on device

Docker 存储目录迁移:解决 No space left on device

一、问题背景

在使用 Docker 构建镜像时,出现以下错误:

chmod: changing permissions of './shooting': No space left on device

查看磁盘使用情况:

$df-h文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 50G 50G 59M100% / /dev/mapper/centos-home 418G 652M 418G1% /home

根因分析:Docker 默认数据目录/var/lib/docker/位于根分区(centos-root),该分区已 100% 占满;而/home分区(centos-home)有 418G 空闲空间几乎未使用。

解决方案:将 Docker 数据目录从/var/lib/docker/迁移到/home/docker/,利用 home 分区的大容量空间。

二、迁移前准备

1. 确认当前 Docker 数据目录

dockerinfo|grep"Docker Root Dir"# 输出:Docker Root Dir: /var/lib/docker

2. 查看当前 Docker 占用空间

du-sh/var/lib/docker/# 输出:64G

3. 确认目标分区空间充足

df-h/home# 确保 /home 分区可用空间 > Docker 数据目录大小

三、迁移步骤

第一步:停止所有容器和 Docker 服务

# 停止所有运行中的容器dockerstop$(dockerps-q)# 停止 Docker socket(防止自动激活)systemctl stop docker.socket# 停止 Docker 服务systemctl stopdocker# 停止 containerdsystemctl stop containerd# 确认都已停止systemctl statusdockersystemctl status docker.socket# 验证没有 Docker 进程残留psaux|grepdocker|grep-vgrep

注意:必须先停止docker.socket再停止docker,否则 socket 可能会自动重新激活 Docker 服务。如果ps aux仍有 Docker 进程残留,使用kill手动终止。

第二步:迁移数据并创建软链接(可选)

# 移动现有的 Docker 数据到新位置mv/var/lib/docker /home/docker# 创建软链接,确保兼容性(可选)# 软链接方案:Docker 仍通过原路径访问,实际数据存储在 /home 分区,无需修改 daemon.jsonln-s/home/docker /var/lib/docker# 验证软链接创建成功ls-la/var/lib/docker# 期望输出:/var/lib/docker -> /home/docker

说明

  • 使用mv直接移动目录,相比rsync/cp更简洁,移动完成后原目录自动消失,无需额外清理
  • 由于/var/lib/docker/home位于不同分区,mv会自动执行跨分区复制+删除操作
  • 软链接方案(推荐):创建软链接后,Docker 仍通过/var/lib/docker路径访问数据,无需修改daemon.json配置,兼容性更好,对 Docker 完全透明
  • 不创建软链接方案:需在下一步修改daemon.json配置data-root: "/home/docker",Docker 直接从新路径读取数据
  • 迁移时间取决于数据量,64G 数据可能需要几分钟到十几分钟,请耐心等待

第三步:验证数据迁移完整性

# 验证软链接指向正确ls-la/var/lib/docker# 期望输出:/var/lib/docker -> /home/docker# 确认新目录数据完整du-sh/home/docker/

确认软链接正确且数据目录大小正常后,继续下一步。

第四步:重启 Docker 服务

systemctl startdocker

第五步:验证迁移结果

# 确认 Docker 数据目录(软链接方式下仍显示原路径,实际已存储在 /home 分区)dockerinfo|grep"Docker Root Dir"# 期望输出:Docker Root Dir: /var/lib/docker# 确认实际数据已存储在 /home 分区df-h/home/docker/# 确认镜像和容器是否正常dockerimagesdockerps-a

四、迁移后验证

重新执行之前失败的 Docker 构建命令:

cd/home/shooting/&&dockerbuild-tshooting.

查看磁盘空间变化:

df-h# 根分区使用率应明显下降# /home 分区使用率相应上升

五、补充优化:清理 Docker 无用资源

如果迁移后根分区空间仍不够,可以清理 Docker 的无用资源:

# 清理所有未使用的镜像、容器、网络和构建缓存dockersystem prune-a# 查看各部分占用空间dockersystemdf

六、注意事项

  1. 迁移前确保目标分区空间充足,至少预留 Docker 当前数据 1.2 倍的空间用于后续增长
  2. 迁移过程中必须停止 Docker 服务,否则可能导致数据不一致
  3. 软链接方式无需修改 Docker 配置,兼容性好,对 Docker 透明
  4. SELinux 环境下如遇权限问题,可能需要执行:
    chcon-Rtsvirt_sandbox_file_t /home/docker
  5. 迁移完成后,建议在/home/docker所在分区设置磁盘使用告警,避免再次出现空间不足

七、回滚方案

如果迁移后出现问题,可以快速回滚:

# 停止 Dockersystemctl stopdocker# 删除软链接rm/var/lib/docker# 将数据移回原位置mv/home/docker /var/lib/docker# 重启 Dockersystemctl startdocker
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/12 15:22:58

5分钟打造桌面股票监控系统:TrafficMonitor股票插件完全指南

5分钟打造桌面股票监控系统:TrafficMonitor股票插件完全指南 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins 在快节奏的投资市场中,实时掌握股票行情至关…

作者头像 李华
网站建设 2026/6/12 15:22:58

Redis 3 大问题 + 5 大扩展问题

一、Redis 3 大经典问题(面试 100% 必考)1.1 雪崩(Avalanche)问题:大量 key 同一时间过期,导致所有请求打到数据库早上 9:00↓ Redis 里 50w 个缓存 key 全部过期(设的同一时间,比如…

作者头像 李华
网站建设 2026/6/12 15:22:57

分布式锁 5 种实现

为什么需要分布式锁?单机应用:synchronized / ReentrantLock ← JVM 内锁 分布式应用:多 JVM 实例,synchronized 不够用!← 需要分布式锁MySQL 分布式锁(最朴素)-- 用唯一索引实现分布式锁 CRE…

作者头像 李华
网站建设 2026/6/12 15:22:36

为什么全球设备商都选 Metrix 国际物联网卡?

在智能硬件全球化量产出海的行业趋势下,设备厂商的核心竞争优势,早已不局限于终端产品本身的性能与品质,更取决于全球化部署效率、跨区域运维稳定性、长期合规风控能力与综合运营成本控制。多数出海设备故障、项目延期、售后纠纷,…

作者头像 李华