Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘

news2024/11/13 15:54:28

摘要:大家在Linux上用Docker部署项目的时候,有时候会部署多个项目,系统盘空间不足,数据盘又挂载有很多空间,这时候就会想要将 Docker 镜像和容器数据迁移到数据盘,本文主要讲解迁移步骤和迁移过程中遇到的一些坑,记录给大家避免再次入坑。

1.Docker基础知识

Docker 是一种容器化平台,可用于将应用程序及其所有依赖项打包到一个标准化的单元中,从而实现快速部署、可移植性和可扩展性。以下是一些 Docker 的基础知识:

(1)容器: Docker 使用容器来打包应用程序及其所有依赖项,包括运行时、系统库、环境变量等。容器是一个独立、可执行的软件包,可以在任何支持 Docker 的环境中运行。

(2)镜像: 镜像是容器的基础,它包含了一个应用程序运行所需的所有文件系统内容、运行时、库和环境变量。镜像是只读的,可用于创建容器实例。

(3)Docker 引擎: Docker 引擎是一个客户端-服务器应用程序,用于创建和管理 Docker 容器。它包括一个守护进程(服务器)和一个 CLI(客户端),通过 REST API 与守护进程通信。

(4)Dockerfile: Dockerfile 是一个文本文件,其中包含一系列指令,用于自动化创建 Docker 镜像。通过 Dockerfile,可以定义容器的环境、运行时设置和启动命令等信息。

(5)Docker 镜像仓库: Docker 镜像仓库是用于存储和分享 Docker 镜像的地方。Docker Hub 是 Docker 官方提供的公共镜像仓库,还有一些私有的镜像仓库,如 Docker Trusted Registry(DTR)等。

(6)Docker 容器网络: Docker 容器可以在自己的网络命名空间中运行,每个容器都有自己的 IP 地址,并且可以与其他容器和主机通信。Docker 提供了多种网络模式,如桥接、主机模式、容器模式等,以满足不同场景下的网络需求。

(7)Docker Volume: Docker Volume 是一种用于持久化数据的机制,它可以在容器之间共享数据,并且在容器被删除后数据仍然保留。可以使用 Docker CLI 或 Docker Compose 来管理 Volume。

(8)Docker Compose: Docker Compose 是一个用于定义和运行多个 Docker 容器的工具,通过一个 YAML 文件来配置应用程序的服务、网络和卷等信息,并且可以一键启动、停止和管理整个应用程序。

以上是 Docker 的一些基础知识,希望能帮助你了解 Docker 的基本概念和用法。

2.将 Docker 镜像和容器数据迁移到数据盘

2.1 操作具体步骤

如果您的 Linux 系统盘空间不足,并且想要将 Docker 镜像和容器数据迁移到数据盘,可以按照以下步骤进行操作:

  1. 停止 Docker 服务:在迁移数据之前,需要停止 Docker 服务。

    bash

    sudo systemctl stop docker
    
  2. 备份数据:为了安全起见,建议在迁移之前备份当前的数据。

    bash

    sudo rsync -a /var/lib/docker /mnt/data/docker-data
    

    这里的 /var/lib/docker 是默认的 Docker 数据存储目录,您需要将其替换为实际的 Docker 数据目录(如果之前已经更改过)。/mnt/docker-data 是新的数据盘挂载点。

  3. 修改 Docker 配置:根据您使用的 Docker 版本,选择使用 "graph" 或 "data-root" 配置项。如果您使用的是 Docker 17.05.0 或更高版本,使用以下配置:

    json

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

    将上述内容保存到 /etc/docker/daemon.json 文件中。

  4. 移动数据:如果您没有在步骤 2 中使用 rsync 进行备份,现在可以手动将数据移动到新的位置。由于已经使用 rsync 备份,这里不再需要移动数据。

  5. 启动 Docker 服务:完成配置后,重新启动 Docker 服务。

    bash

    sudo systemctl start docker
    
  6. 验证迁移:检查 Docker 是否正确地使用新的数据目录,并验证镜像和容器是否正常运行。

    bash

    docker info | grep "Docker Root Dir"
    

    这将显示 Docker 正在使用的根目录,应该与您设置的 "/mnt/docker-data" 匹配。

  7. 清理旧数据(可选):如果确认新数据目录一切正常,可以清理旧的数据目录以释放空间。

    bash

    sudo rm -rf /var/lib/docker
    

在执行这些操作时,请确保您有足够的权限,并且操作过程中不会影响到正在运行的服务。另外,迁移数据时,请确保新数据盘挂载点的文件系统格式是兼容 Docker 的,通常是 ext4 或 xfs。

请注意以下几点:

  • 在操作之前,确保目标磁盘已经挂载并且有足够的可用空间。
  • 如果您的系统正在运行重要的服务,请在迁移前做好充分备份,以防数据丢失。
  • 在移动数据之后,可能需要重新启动 Docker 容器,因为它们可能还在使用旧的数据目录。
  • 如果您的系统使用的是 overlay2 或其他特定的存储驱动,确保新磁盘的文件系统支持这些特性。
  • 如果您在迁移过程中遇到问题,可以随时将数据复制回原来的位置,并恢复原来的配置。

2.2 常见问题1 daemon.json报错

1.1问题描述:修改完daemon后重启(命令:systemctl restart docker)docker报错,如下图所示

1.2问题分析:

上面的问题日志复制到百度和AI去寻找解决方案,常识各种办法去解决还是搞不定,心里贼难受,这时请教了一下办公室里的前辈(广西潘总),他分析说可能是我用的kimi大模型寻找答案踩坑了,然后把重启docker日志实时监听,于是找了以下命令打开另一个窗口执行:

sudo journalctl -u docker.service -f

然后再到原来窗口重启docker,重启命令:

sudo systemctl restart docker

好家伙,终于发现是Docker的配置报错了:无法使用文件 /etc/docker/daemon.json 配置 Docker 守护进程:以下指令与任何配置选项都不匹配:graph,如下图所示:

1.3解决方案:

查看了本人Linux服务器安装的Docker版本号,操作命令和查看如下图所示:

docker --version

我的docker版本号是18.03.1-ce ,大于或等于17.05.0,配置文件不能用graph,将daemon.json

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

graph参数名改成data -root

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

然后重启docker,发现问题解决。

2.3 常见问题2 权限不足

1.1 问题描述:修改配置后重启docker,提示权限不足。

1.2 问题分析:操作必须要用原来安装docker的用户账号或者root最高权限用户操作,而且迁移目标确保路径正确,目录也需要授权。

1.3 解决方案:

切换root账号进行操作,切换命令如下,执行后输入root密码即可成功切换

su -

确保 /mnt/docker-data 目录存在并且具有正确的权限。你可以使用以下命令来检查和设置权限:

sudo mkdir -p /mnt/data/docker-data
sudo chown root:root /mnt/data/docker-data
sudo chmod 755 /mnt/data/docker-data

 

3. 将Docker容器镜像移动到另一个磁盘

在Linux系统中,如果你想要将Docker容器镜像移动到另一个磁盘,你可以按照以下步骤操作:

  1. 查找镜像ID: 首先,你需要找到你想要移动的Docker镜像的ID。可以使用以下命令列出所有镜像及其ID:

    docker images
  2. 保存镜像为tar文件: 使用 docker save 命令将镜像保存为tar文件。例如,如果你的镜像ID是 1234567890abcdef,你可以使用以下命令:

    docker save 1234567890abcdef > /path/to/your/disk/mirror.tar

    这里的 /path/to/your/disk/ 是你想要保存tar文件的目标路径。

  3. 删除本地镜像(可选): 如果你不再需要在当前位置保留这个镜像,可以使用 docker rmi 命令删除它:

    docker rmi 1234567890abcdef
  4. 将tar文件移动到目标磁盘: 如果tar文件不在目标磁盘上,你可以使用 mv 命令将其移动:

    mv /path/to/current/disk/mirror.tar /path/to/your/disk/
  5. 在目标磁盘上加载镜像: 在目标磁盘上,使用 docker load 命令加载tar文件:

    docker load < /path/to/your/disk/mirror.tar
  6. 验证镜像: 使用 docker images 命令再次检查,确保镜像已经成功加载到Docker中。

请注意,这个过程不会移动容器的数据卷,如果你的容器有挂载的数据卷,你需要单独处理这些数据卷。另外,确保你有足够的权限来执行这些操作,并且在移动镜像之前停止并删除任何正在使用该镜像的容器。

如果你的Docker守护进程配置为使用特定的存储驱动,你可能需要确保目标磁盘支持该存储驱动,并且Docker守护进程有权限访问该磁盘。

 总结

Linux系统上,若Docker镜像占满系统盘,可迁移至数据盘。首先,停止Docker服务,使用`systemctl stop docker`。接着,通过`rsync -a /var/lib/docker /path/to/new/disk/docker`命令将Docker数据同步到新盘。然后,编辑`/etc/docker/daemon.json`,将`"data-root"`设置为新路径。移动数据后,启动Docker服务,并验证新路径是否生效。确保新磁盘挂载且空间充足,迁移前后做好备份,以防数据丢失。迁移后可能需要重启容器,以使用新数据目录。
 

希望这篇博客能够为你在Docker镜像迁移过程中提供一些启发和指导。如果你有任何问题或需要进一步的建议,欢迎在评论区留言交流。让我们一起探索IT世界的无限可能!


博主还分享了本文相关文章,请各位大佬批评指正:

1、Intellij idea高效使用教程

2、AI编程工具合集

3、CodeGeeX一款基于大模型全能的智能编程助手

4、Git 代码提交注释管理规范

5、解释 Git 的基本概念和使用方式。

6、postman介绍、安装、使用、功能特点、注意事项

7、Windows10安装Docker Desktop(大妈看了都会)

8、02-pycharm详细安装教程(大妈看了都会)

9、01-Python详细安装教程(大妈看了都会)

10、2024年最新版IntelliJ IDEA下载安装过程(含Java环境搭建)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2140264.html

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

相关文章

轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数

示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4]示例 2: 输入&#xff1a;nums [-1,-100,3,99], k 2 输出&#xff1a;[3,99,-1,-100] 解释: 向右…

Spring-IOC容器-ApplicationContext

IOC:Inversion of Control 控制反转&#xff0c;是一种设计原则&#xff0c;spring 中通过DI&#xff08;dependency Injection&#xff09;来具体实现。 比如原本对象的实例化&#xff0c;是通过程序主动New出来&#xff0c;IOC中的对象实例交给Spring框架来实例化&#xff0…

形而上学(Metaphysics)

讯飞星火 形而上学&#xff08;Metaphysics&#xff09;是哲学的一个门类&#xff0c;主要研究世界的本质、存在者的存在原因及本源等问题。它旨在探讨超越物理世界的抽象概念和原则 。 形而上学最早由亚里士多德提出&#xff0c;被称为“第一哲学”或“第一科学”。这个术语…

基于R语言的统计分析基础:使用dplyr包进行数据操作

dplyr是R语言中一个功能强大且流行的数据操作包&#xff0c;它提供了一系列用于数据清洗、转换、汇总和可视化的工具。这些工具包括选择列、过滤行、排序、添加或修改列、汇总数据以及分组和合并数据集的函数。dplyr的设计使得数据操作变得简单直观&#xff0c;同时保持高性能&…

鹏哥C语言自定义笔记重点(67-)

67. 68. 69. 70. 71.结构体内容 72.理解结构体的字节数 73. #pragma once //头文件中使用&#xff0c;功能是:防止头文件被多次引用 74.结构体传参 结论:结构体传参时&#xff0c;要传结构体地址。 75.位段 76.static是只能在该文件中看到&#xff0c;其他地方看不到 77.…

Linux 文件 IO 管理(第一讲)

Linux 文件 IO 管理&#xff08;第一讲&#xff09; 回顾 C 语言文件操作&#xff0c;提炼理解新创建的文件为什么被放在可执行文件的同级目录下&#xff1f;上述 log.txt 何时被创建&#xff1f;又是谁在打开它&#xff1f;那文件没有被打开的时候在哪里&#xff1f;一个进程可…

柳淘鸿美业大健康:开启消费赚钱新时代!

随着消费升级和健康意识的不断提高&#xff0c;柳淘鸿美业大健康正式宣布开启消费赚钱新时代&#xff01;这家引领行业潮流的公司以其创新的商业模式和独特的产品组合&#xff0c;正在改变人们对美业和健康产业的认知。 柳淘鸿美业大健康作为国内领先的新零售赋能中心&#xf…

19. 网络结构搭建实例

网络结构搭建实例 1. 网络结构图 图示为适应 cifar10 数据集的一个网络结构图&#xff0c;本文主要针对于复现如下网络结构&#xff0c;并介绍相关函数的使用 2. 网络结构各层参数分析 复现网络结构前需要对各层的参数进行分析 第一层&#xff1a;Input (3*32*32) --> C…

2024年<9月版>宠物空气净化器推荐,希喂、霍尼韦尔、IAM吸毛吗

宠物空气净化器现在是每个养宠家庭都必不可少的家电&#xff0c;我们可以没有吸尘器、扫地机器人&#xff0c;但绝对不能没有宠物空气净化器&#xff01;有了宠物空气净化器就可以帮我们解决浮毛这一大难题&#xff0c;特别是换季时节&#xff0c;宠物开始换毛&#xff0c;有了…

leetcode hot100_part4_子串

2024/4/20—4/21 560.和为K的子数组 前缀和哈希表&#xff0c;做二叉树的时候也有这个套路。注意细节&#xff0c;遍历到当前前缀和的时候是先找结果个数还是先加入哈希&#xff1f;应该先找结果个数&#xff0c;不然的话&#xff0c;当前位置也算上了&#xff08;因为是前缀和…

【网络安全】-文件上传漏洞

文件操作漏洞包括文件上传漏洞&#xff0c;文件包含漏洞&#xff0c;文件下载漏洞。 文章目录 前言 什么是文件上传漏洞&#xff1f; 文件上传的验证与绕过&#xff1a; 1.前端js验证&#xff1a;   Microsft Edge浏览器&#xff1a; Google Chrome浏览器&#xff1a; 2.后端…

【jvm】记一次hive堆heap内存溢出的排查

先看下java的内存模型 监控jvm工具&#xff1a;visualVM 摘录一下内容&#xff1a; 由c开发的jvm&#xff0c;它巧妙地设计了java的设计理念——即万物皆对象。并设计了这些对象应该如何存储&#xff0c;如何调用&#xff0c;并通过不断迭代设计让对象的存储和回收&#xff0…

最新安装vmware地址(官网找半天没找到)

CDS Repository - /var/www/public/stage/session-120/cds/vmw-desktop 直接走这个点进去&#xff0c;windows点ws&#xff0c;linux和mac点fusion进去下对应版本 win为例子&#xff1a;CDS Repository - /var/www/public/stage/session-50/cds/vmw-desktop/ws/17.6.0/242380…

MyBatis中一对多关系的两种处理方法

目录 1.多表联查&#xff08;通过collection标签的ofType属性&#xff09; 1&#xff09;mapper 2&#xff09;mapper.xml 3&#xff09;测试代码 4&#xff09;测试结果 2.分布查询(通过collection标签的select属性) 1&#xff09;mapper 2&#xff09;mapper.xml 3&#xff0…

铁路输电线路异物检测数据集

铁路输电线路异物检测数据集&#xff0c;共6GB&#xff0c;14000余图像&#xff0c;40000标注&#xff0c;标注鸟巢&#xff0c;塑料袋&#xff0c;气球&#xff0c;漂浮物四大类。coco格式标注。 项目背景&#xff1a; 铁路输电线路是保障铁路运输安全的重要组成部分&#xf…

Golang | Leetcode Golang题解之第405题数字转换为十六进制数

题目&#xff1a; 题解&#xff1a; func toHex(num int) string {if num 0 {return "0"}sb : &strings.Builder{}for i : 7; i > 0; i-- {val : num >> (4 * i) & 0xfif val > 0 || sb.Len() > 0 {var digit byteif val < 10 {digit 0…

小程序组件间通信

文章目录 父传子子传父获取组件实例兄弟通信 父传子 知识点&#xff1a; 父组件如果需要向子组件传递指定属性的数据&#xff0c;在 WXML 中需要使用数据绑定的方式 与普通的 WXML 模板类似&#xff0c;使用数据绑定&#xff0c;这样就可以向子组件的属性传递动态数据。 父…

随机森林算法介绍

文章目录 基本原理关键步骤举例说明算法流程优点缺点实现示例总结 随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法&#xff0c;主要用于分类和回归任务。它通过集成多棵决策树来提高模型的准确性和泛化能力。以下是随机森林的详细算法介绍&#xff1a; 基本…

VMware Tools系列二:图解安装VMware Tools过程

一、安装环境&#xff1a; VMware Workstation Pro17华为OpenEuler虚拟机 二、安装步骤&#xff1a; 在VMware Workstation中为OpenEuler虚拟机安装VMware Tools的步骤如下&#xff1a; 1. 确保OpenEuler虚拟机正在运行。注意&#xff0c;安装的VMware Tools只对当前虚拟机…

结合人工智能,大数据,物联网等主流技术实现业务流程的闭环整合的名厨亮灶开源了

明厨亮灶视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。AI技术可以24小时…