当前位置: 首页 > article >正文

docker 占用系统空间太大了,整体迁移到挂载的其他磁盘|【当前普通用户使用docker时,无法指定镜像、容器安装位置【无法指定】】

文章目录

  • 前言【核心步骤皆为 大模型生成的方案】
  • 总结步骤应该是:
  • 详细步骤如下
      • 1. **停止 Docker 服务**
      • 2. **备份原数据(防止迁移失败)**
      • 3. **迁移数据到新磁盘**
      • 4. **修改 Docker 配置文件**
      • 5. **重启 Docker 服务**
      • 6. **验证容器和镜像**
      • 7. **删除旧数据(确认迁移成功后)**
      • ⚠️ **关键注意事项**
      • 故障排查
  • 当前普通用户使用docker时,指定镜像、容器安装位置【无法指定】
      • **方法 1:修改 Docker 存储根目录(需 root 权限)**
      • **方法 2:使用 `docker save` 导出镜像到指定目录**
      • **方法 3:使用 Rootless Docker(无需 root 权限)**
      • **方法 4:挂载目录到容器(临时方案)**
      • **终极建议** -
      • **输出示例(方法 2)**
    • 📙 精选专栏

🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连
🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️

0-9

前言【核心步骤皆为 大模型生成的方案】

Linux 服务器,docker 占用系统空间太大了,整体迁移到挂载的其他磁盘

总结步骤应该是:

  1. 停止Docker服务。
  2. 备份原数据。
  3. 复制数据到新位置。
  4. 配置Docker使用新路径。
  5. 重启Docker并验证。
  6. 清理旧数据。

详细步骤如下

你可以将 Docker 的默认存储目录(/var/lib/docker)整体迁移到挂载的磁盘目录(如 /mnt/docker),以下是 安全迁移的完整步骤,确保迁移后所有用户和容器正常运行:


1. 停止 Docker 服务

sudo systemctl stop docker
# 停止所有正在运行的容器(可选,但建议)
sudo docker stop $(sudo docker ps -q)

2. 备份原数据(防止迁移失败)

sudo cp -a /var/lib/docker /var/lib/docker.bak

3. 迁移数据到新磁盘

假设新挂载的目录为 /mnt/docker

# 复制数据(保留权限和属性)
sudo rsync -aXS /var/lib/docker/ /mnt/docker/
# 验证数据完整性
sudo diff -r /var/lib/docker /mnt/docker

4. 修改 Docker 配置文件

编辑 /etc/docker/daemon.json,添加新存储路径:

{
  "data-root": "/mnt/docker"
}

如果文件不存在,直接创建它。


5. 重启 Docker 服务

sudo systemctl start docker
# 验证服务状态
sudo systemctl status docker

6. 验证容器和镜像

sudo docker images  # 应显示原有镜像
sudo docker ps -a   # 应显示原有容器

7. 删除旧数据(确认迁移成功后)

sudo rm -rf /var/lib/docker

⚠️ 关键注意事项

  1. 权限问题

    • 确保新目录权限与原有一致(通常是 root:root0700):
      sudo chmod 700 /mnt/docker
      sudo chown root:root /mnt/docker
      
    • 如果使用 SELinux/AppArmor,可能需要调整安全上下文:
      sudo restorecon -Rv /mnt/docker
      
  2. 挂载磁盘配置

    • 确保挂载的磁盘在系统启动时自动加载(编辑 /etc/fstab),避免 Docker 因目录不可用而启动失败。
  3. 兼容性

    • 如果新磁盘是网络存储(如 NFS),需确认 Docker 支持该存储类型(建议使用本地磁盘或高性能云盘)。
  4. 存储驱动一致性

    • 迁移后的存储驱动(如 overlay2)需与原系统一致,可通过以下命令检查:
      sudo docker info | grep "Storage Driver"
      

故障排查

  • Docker 启动失败
    检查日志定位原因:

    journalctl -u docker.service --no-pager -n 100
    
  • 容器/镜像丢失
    从备份恢复数据:

    sudo mv /var/lib/docker.bak /var/lib/docker
    

通过以上步骤,Docker 将使用新磁盘作为存储目录,原有用户和容器均可正常访问,且不会丢失任何数据。

当前普通用户使用docker时,指定镜像、容器安装位置【无法指定】

在 Docker 的默认设计中,镜像的存储位置由 Docker 守护进程统一管理,普通用户无法直接通过 docker pull 命令指定单次下载的存储路径。但可以通过以下方法间接实现类似效果:


方法 1:修改 Docker 存储根目录(需 root 权限)

原理:通过修改 Docker 的全局配置,将镜像默认存储位置指向其他路径。
步骤

# 1. 停止 Docker 服务
sudo systemctl stop docker

# 2. 修改 Docker 配置文件
sudo vim /etc/docker/daemon.json
# 添加以下内容(假设新路径为 /new/path/docker)
{
  "data-root": "/new/path/docker"
}

# 3. 移动原有数据(可选)
sudo mv /var/lib/docker /new/path/docker

# 4. 重启 Docker
sudo systemctl start docker

缺点

  • 需要管理员权限
  • 影响所有用户的 Docker 存储位置

方法 2:使用 docker save 导出镜像到指定目录

原理:先拉取镜像到默认位置,再导出为文件到自定义路径。
步骤

# 1. 拉取镜像
docker pull ubuntu:latest

# 2. 导出镜像到指定目录(如 ~/my-images)
docker save -o ~/my-images/ubuntu.tar ubuntu:latest

优点

  • 无需特殊权限
  • 可精确控制镜像文件的存储位置

方法 3:使用 Rootless Docker(无需 root 权限)

原理:以非特权用户身份运行 Docker,镜像默认存储在用户目录下(~/.local/share/docker)。
配置步骤

# 1. 安装 rootless Docker
curl -fsSL https://get.docker.com/rootless | sh

# 2. 设置环境变量
export PATH=/home/$USER/bin:$PATH
export DOCKER_HOST=unix:///run/user/$UID/docker.sock

# 3. 拉取镜像(自动存储到用户目录)
docker pull ubuntu:latest

镜像存储路径
~/.local/share/docker/overlay2


方法 4:挂载目录到容器(临时方案)

原理:通过挂载宿主机目录到容器,间接实现文件存储到指定位置。
示例

# 拉取镜像时,将宿主机的 /custom/path 挂载到容器
docker run -v /custom/path:/data ubuntu:latest

适用场景

  • 主要用于容器运行时挂载数据卷,而非直接控制镜像存储位置。

终极建议 -

  1. 普通用户无 root 权限
    使用 方法 2docker save)或 方法 3(Rootless Docker)。

    • Rootless Docker 是官方推荐的安全方案,适合个人开发环境。
  2. 管理员权限可用
    使用 方法 1 全局修改存储路径,或通过软链接:

    # 该命令 慎用,相当于重新安装
    
    sudo rm -rf /var/lib/docker
    
    sudo ln -s /custom/path/docker /var/lib/docker
    

输出示例(方法 2)

$ docker pull ubuntu:latest

latest: Pulling from library/ubuntu
Digest: sha256:669eafb9...  
Status: Downloaded newer image

$ docker save -o ~/backup/ubuntu.tar ubuntu:latest

$ ls -lh ~/backup/ubuntu.tar

-rw------- 1 user user 72M Jun 10 15:30 ubuntu.tar

通过上述方法,普通用户可灵活控制镜像文件的最终存储位置。


📙 精选专栏


  • 🍊 深度学习模型训练推理——基础环境搭建推荐博文查阅顺序【基础安装—认真帮大家整理了】——【1024专刊】

计算机视觉领域 八大专栏、不少干货、有兴趣可了解一下

  • ❤️ 图像风格转换 —— 代码环境搭建 实战教程【关注即可阅】!
  • 💜 图像修复-代码环境搭建-知识总结 实战教程 【据说还行】
  • 💙 超分重建-代码环境搭建-知识总结 解秘如何让白月光更清晰【脱单神器】
  • 💛 YOLO专栏,只有实战,不讲道理 图像分类【建议收藏】!
  • 🍊 深度学习:环境搭建,一文读懂

  • 🍊 深度学习:趣学深度学习

  • 🍊 落地部署应用:模型部署之转换-加速-封装

  • 🍊 CV 和 语音数据集:数据集整理

  • 🍊 点赞 👍 收藏 ⭐留言 📝 都是博主坚持写作、更新高质量博文的最大动力!

9-9


http://www.kler.cn/a/566363.html

相关文章:

  • 二、QT和驱动模块实现智能家居----1、使用ADB
  • NO.21十六届蓝桥杯备战|一维数组|范围for|memset|memcpy(C++)
  • Milvus高性能向量数据库与大模型结合
  • 【微知】git 如何修改某个tag名字?如何根据某个commit创建一个tag?
  • DeepSeep开源周,第三天:DeepGEMM是啥?
  • 2021-05-27 C++找出矩阵数组中值最大的元素和它在数组中的位置
  • 005 公网访问 docker rocketmq
  • 爬虫:一文掌握JavaScript hook的详细使用
  • 基于DeepSeek,构建个人本地RAG知识库
  • 基于ArcGIS Pro、R、INVEST的生态系统服务权衡与协同分析
  • 在VSCode 中使用通义灵码最新版详细教程
  • docker启动elasticsearch,挂载文件报错:Device or resource busy
  • Hi3516CV610车牌识别算法源码之——车牌识别算法初体验
  • 【Go】十八、http 调用服务的编写
  • DO-254航空标准飞行器电机控制器设计注意事项
  • 智慧校园平台在学生学习与生活中的应用
  • 从数据采集到存储:构建高可用个股资金流向分析系统
  • 使用CSS3DRenderer/CSS2DRenderer给模型上面添加html标签的一个demo
  • 介绍微信小程序中页面的生命周期函数和组件的生命周期函数
  • 2025影视泛目录无需缓存技术:苹果CMS站群Search聚合版蜘蛛诱捕