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/dockersudo ln -s /custom/path/docker /var/lib/docker
    

输出示例(方法 2)

$ docker pull ubuntu:latestlatest: 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.mzph.cn/web/70952.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计后端返回给前端的返回体

目录 1、为什么要设计返回体? 2、返回体包含哪些内容(如何设计)? 举例 3、总结 1、为什么要设计返回体? 在设计后端返回给前端的返回体时,通常需要遵循一定的规范,以确保前后端交互的清晰性…

Springboot 自动化装配的原理

Springboot 自动化装配的原理 SpringBoot 主要作用为:起步依赖、自动装配。而为了实现这种功能,SpringBoot 底层主要使用了 SpringBootApplication 注解。 首先,SpringBootApplication 是一个复合注解,它结合了 Configuration、…

基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能:用户,博客信息,资源共享,游戏视频,游戏照片 开题报告内容 基于FlaskVue框架的游戏博客网站设计开题报告 一、项目背景与意义 随着互联网技术的飞速发展和游戏产业的不断壮大,游戏玩家对游戏资讯、攻略、评测等内容的需求日…

算法-二叉树篇13-路径总和

路径总和 力扣题目链接 题目描述 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回…

8. 示例:对32位数据总线实现位宽和值域覆盖

文章目录 前言示例一:示例二:示例三:仿真与覆盖率分析覆盖点详细说明覆盖率提升技巧常见错误排查 示例四:仿真步骤 前言 针对32位数据总线实现位宽和值域的覆盖,并且能够用xrun运行,查看日志和波形。cover…

TDengine 中的数据库

数据库概念 时序数据库 TDengine 中数据库概念,等同于关系型数据库 MYSQL PostgreSQL 中的数据库,都是对资源进行分割管理的单位。 TDengine 数据库与关系型数据库最大区别是跨库操作,TDengine 数据库跨库操作除了少量几个SQL 能支持外&…

开源电商项目、物联网项目、销售系统项目和社区团购项目

以下是推荐的开源电商项目、物联网项目、销售系统项目和社区团购项目,均使用Java开发,且无需付费,GitHub地址如下: ### 开源电商项目 1. **mall** GitHub地址:[https://github.com/macrozheng/mall](https://git…

如何设计一个短链系统?

短链系统设计的关键要点: 系统功能实现 短链生成:接收长链接,先检查是否已有对应短链,存在则直接返回。否则,使用分布式 ID 生成器(如号段模式、SnowFlake 算法、数据库自增 ID、Redis 自增等)生成唯一 ID,或通过哈希算法(如 MurmurHash)处理长链接得到哈希值。再将生…

数据结构(初阶)(三)----单链表

单链表 概念 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 结点 与顺序表不同的是,链表的结构类似于带车头的火车车厢,,链表的每个车厢都是独立…

游戏引擎学习第129天

仓库:https://gitee.com/mrxiao_com/2d_game_3 小妙招: vscode:定位错误行 一顿狂按F8 重构快捷键:F2 重构相关的变量 回顾并为今天的内容做准备 今天的工作主要集中在渲染器的改进上,渲染器现在运行得相当不错,得益于一些优化和组织上的改进。我们计…

文字描边实现内黄外绿效果

网页使用 <!DOCTYPE html> <html> <head> <style> .text-effect {color: #ffd700; /* 黄色文字 */-webkit-text-stroke: 2px #008000; /* 绿色描边&#xff08;兼容Webkit内核&#xff09; */text-stroke: 2px #008000; /* 标准语法 *…

yolov8 目标追踪 (源码 +效果图)

1.在代码中 增加了s键开始追踪 e键结束追踪 显示移动距离(代码中可调标尺和像素的比值 以便接近实际距离) 2.绘制了监测区域 只在区域内的检测 3.规定了检测的类别 只有人类才绘制轨迹 import osimport cv2 from ultralytics import YOLO from collections import defaultdic…

2.5 运算符2

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的 2.5.3 赋值运算符 赋值运算符将值存储在左操作数指定的对象中。有两种赋值操作&#xff1a; 1、简单赋值&#xff0c;使用。其中第二…

地弹与振铃

地弹&#xff08;Ground Bounce&#xff09;和振铃&#xff08;Ringing&#xff09;是数字电路中常见的信号完整性问题&#xff0c;两者都与高速开关和寄生参数有关&#xff0c;但表现形式和成因不同。以下是它们的对比及解决方法&#xff1a; 1. 地弹&#xff08;Ground Bounc…

解决Deepseek“服务器繁忙,请稍后再试”问题,基于硅基流动和chatbox的解决方案

文章目录 前言操作步骤步骤1&#xff1a;注册账号步骤2&#xff1a;在线体验步骤3&#xff1a;获取API密钥步骤4&#xff1a;安装chatbox步骤5&#xff1a;chatbox设置 价格方面 前言 最近在使用DeepSeek时&#xff0c;开启深度思考功能后&#xff0c;频繁遇到“服务器繁忙&am…

二十三种设计模式

2 工厂方法模式 工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通…

基于C语言对CAPL语法基础的理解

.CAPL是基于C语言开发的&#xff0c;专门用于CANalyzer和CANoe工具环境&#xff0c;但是CAPL简化了C语言&#xff0c;移除了复杂的指针概念&#xff0c;和一些不常用的关键字。 2.CAPL 脚本是基于事件驱动的&#xff0c;任何事件都有可能触发CAPL脚本的执行&#xff0c;比如&a…

【Java SE】Java中String的内存原理

参考笔记&#xff1a; Java String 类深度解析&#xff1a;内存模型、常量池与核心机制_java stringx、-CSDN博客 解析java中String的内存原理_string s1 new string("ab");内存分析-CSDN博客 目录 1.String初识 2.字符串字面量 3.内存原理图 4. 示例验证 4.…

Prometheus + Grafana 监控

Prometheus Grafana 监控 官网介绍&#xff1a;Prometheus 是一个开源系统 监控和警报工具包最初由 SoundCloud 构建。自 2012 年成立以来&#xff0c;许多 公司和组织已经采用了 Prometheus&#xff0c;并且该项目具有非常 活跃的开发人员和用户社区。它现在是一个独立的开源…

【Python爬虫(95)】Python爬虫进阶:构建大型垂直领域爬虫系统

【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发…