Docker 安装 + 数据目录迁移到 /data 完整指南

Docker数据目录迁移 参考Docker官方文档,进行Docker数据目录的迁移,涉及到容器、镜像、volume等数据的迁移。 阅读详情

Docker 安装 + 数据目录迁移到 /data 完整指南

适用:Ubuntu 20.04 / 22.04 / 24.04,root 或 sudo 权限
目标:Docker 与 containerd 数据都落到 /data,避免撑爆系统盘

目录


0. 前置说明

为什么要把数据目录迁到 /data?

Docker 默认把数据写在 /var/lib/docker,containerd 写在 /var/lib/containerd。

  • 这两个目录都在系统盘(/)上
  • 系统盘通常较小(10~50G)
  • Docker 镜像层非常占空间,几十 G 很常见

结论:只要机器有独立数据盘(如 /data),就必须迁移,否则迟早磁盘满。

迁移后数据流向

组件默认目录迁移后
Docker 引擎/var/lib/docker/data/docker
containerd/var/lib/containerd/data/containerd

1. 环境准备

# 切到 root(可选)
sudo -i

# 更新系统
apt update && apt upgrade -y

# 安装依赖
apt install -y apt-transport-https ca-certificates curl \
               software-properties-common gnupg lsb-release

# 卸载旧版本(如果之前装过)
apt remove -y docker docker-engine docker.io containerd runc \
              docker-compose docker-compose-plugin

# 清理旧数据(⚠️ 只在确认无数据需要保留时执行)
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

验证:docker --version 应报 command not found。

准备数据目录

mkdir -p /data/docker
mkdir -p /data/containerd

df -h /data

验证:/data 剩余空间应远大于系统盘。


2. 安装 Docker

2.1 添加官方 GPG 密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
  | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

验证:

gpg --no-default-keyring \
    --keyring /usr/share/keyrings/docker-archive-keyring.gpg \
    --list-keys

应输出 Docker 的签名密钥信息。

2.2 添加官方源

echo "deb [arch=$(dpkg --print-architecture) \
signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" \
  | tee /etc/apt/sources.list.d/docker.list > /dev/null

2.3 安装

apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

验证:

docker --version           # Docker version 27.x.x
docker compose version     # Docker Compose version v2.x.x

3. 迁移数据目录到 /data

⚠️ 关键章节。漏掉 containerd 的配置,会重蹈"系统盘被撑爆"的覆辙。

3.1 配置 Docker 数据目录

mkdir -p /etc/docker
cat > /etc/docker/daemon.json <<'EOF'
{
  "data-root": "/data/docker",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  }
}
EOF

关键点:

  • data-root:Docker 引擎数据目录
  • log-driver + log-opts:限制每个容器日志 50M × 3 份,防止日志无限涨
  • 不要在这里加 registry-mirrors,第 4 节单独加

3.2 配置 containerd 数据目录(最易漏)

mkdir -p /etc/containerd
containerd config default > /etc/containerd/config.toml

编辑 /etc/containerd/config.toml,找到并修改这两行:

root  = "/data/containerd"
state = "/run/containerd"

说明:

  • root:镜像层数据,必须放在 /data,否则会撑爆系统盘
  • state:运行时状态,必须放在 /run(tmpfs),重启自动清空

改完必须重启 containerd 才生效:

systemctl restart containerd
systemctl status containerd --no-pager | grep -E "Active|root"

验证:

grep -E "^root|^state" /etc/containerd/config.toml

期望输出:

root = '/data/containerd'
state = '/run/containerd'

3.3 启动 Docker

systemctl enable --now docker

3.4 权限配置(可选,非 root 用户)

usermod -aG docker $USER

⚠️ newgrp docker 只对当前 shell 会话生效。
正确做法:登出当前会话,重新登录,或执行 su - $USER 开新 shell。

验证:新开一个终端,运行 docker ps,不报权限错误即成功。


4. 配置镜像加速

4.1 检查镜像源可用性

国内公共源经常变动,先测再用:

for m in docker.1panel.live docker.1ms.run docker.xuanyuan.me docker.m.daocloud.io; do
  printf "%-30s " "$m"
  curl -s -m 5 -o /dev/null -w "%{http_code}\n" "https://$m/v2/" 2>/dev/null || echo "FAIL"
done
  • 返回 200 或 401 → 可用
  • 返回 000 / FAIL → 不可用,从配置里删掉

4.2 写入 daemon.json

把上面测通的源填进去,保留 3.1 节已有的配置:

cat > /etc/docker/daemon.json <<'EOF'
{
  "data-root": "/data/docker",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "50m",
    "max-file": "3"
  },
  "registry-mirrors": [
    "https://docker.1panel.live",
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://docker.m.daocloud.io"
  ]
}
EOF

systemctl daemon-reload && systemctl restart docker

5. 限制系统日志

Docker 的日志有 log-opts 限制,但 systemd journal 也会涨。一并限制:

# 查看当前配置行
grep -n "SystemMaxUse" /etc/systemd/journald.conf

# 如果被注释(#SystemMaxUse=xxx),替换
sed -i 's/^#\?SystemMaxUse=.*/SystemMaxUse=100M/' /etc/systemd/journald.conf

# 如果没有该行,追加
grep -q "^SystemMaxUse" /etc/systemd/journald.conf \
  || echo "SystemMaxUse=100M" >> /etc/systemd/journald.conf

systemctl restart systemd-journald
journalctl --disk-usage

用 #\? 兼容"注释或未注释"两种情况,比原教程更健壮。


6. 完整验证清单

一次性跑完,全部通过才算成功:

echo "=== 1. Docker 数据目录 ==="
docker info | grep "Docker Root Dir"
# 期望: Docker Root Dir: /data/docker

echo "=== 2. containerd 配置 ==="
grep -E "^root|^state" /etc/containerd/config.toml
# 期望: root = '/data/containerd'
#       state = '/run/containerd'

echo "=== 3. 实际占用 ==="
du -sh /data/docker /data/containerd
# 期望: 两个目录都在 /data 下

echo "=== 4. 系统盘干净 ==="
ls /var/lib/docker /var/lib/containerd 2>/dev/null
# 期望: 无输出

echo "=== 5. 镜像加速 ==="
docker info | grep -A5 "Registry Mirrors"

echo "=== 6. journal 限制 ==="
grep SystemMaxUse /etc/systemd/journald.conf
journalctl --disk-usage

echo "=== 7. 开机自启 ==="
systemctl is-enabled docker
systemctl is-enabled containerd
# 期望: enabled

echo "=== 8. 功能测试 ==="
docker run --rm hello-world

7. 常见问题

Q1:拉镜像报 no space left on device,路径是 /var/lib/containerd/...

原因:containerd 配置改了但没有重启 containerd,它还在往系统盘写。

修复:

grep "^root" /etc/containerd/config.toml        # 确认配置是 /data/containerd
systemctl restart containerd                     # 关键
docker system prune -af                          # 清理残留
df -h /                                          # 确认系统盘腾出空间

Q2:容器启动报 network xxx not found

原因:迁移或清理时 docker 网络定义丢失。

修复:在 compose 目录执行

docker compose down      # 删容器和网络,不删挂载数据
docker compose up -d     # 重建

Q3:容器能 ping 通外网,但连不上宿主机的 IP:端口

原因:ufw / firewalld 拦截了 docker bridge 网段到宿主机的流量。

修复:

# 查看 docker 网段
docker network ls --format '{{.Name}}' | while read n; do
  subnet=$(docker network inspect "$n" --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}' 2>/dev/null)
  [ -n "$subnet" ] && echo "$n -> $subnet"
done

# 放行(一条覆盖所有 docker 网段)
ufw allow from 172.16.0.0/12 to any
ufw reload

Q4:docker ps 报 permission denied

原因:用户加入了 docker 组但当前 shell 没生效。

修复:登出重进,或:

newgrp docker

Q5:镜像源都失效了,怎么办

重新测一遍(4.1 节脚本),把 200/401 的替换进 daemon.json,然后:

systemctl daemon-reload && systemctl restart docker

Q6:已有环境想迁移数据(不是全新安装)

# 1. 停服务
systemctl stop docker docker.socket containerd

# 2. 复制数据
apt install -y rsync
rsync -aP /var/lib/docker/     /data/docker/
rsync -aP /var/lib/containerd/ /data/containerd/

# 3. 改配置(3.1 和 3.2 节)

# 4. 启动并验证
systemctl start containerd
systemctl start docker
docker ps                                    # 容器应都在

# 5. 确认无误后删旧数据
rm -rf /var/lib/docker /var/lib/containerd
df -h /
Docker数据目录迁移指南:从/var/lib/docker到数据盘完整实操 Docker作为容器化部署的核心工具,其默认的数据存储位置通常位于系统盘的/var/lib/docker目录。随着镜像、容器、卷和构建缓存的不断累积,系统盘空间极易被耗尽,导致服务无法运行甚至SSH登录异常。理解Docker的存储原理,掌握数据目录的迁移方法,是运维人员和开发者必备的技能。通过修改daemon.json中的data-root参数,可以将Docker根目录整体迁移至容量更大的数据盘,从而彻底解决磁盘空间不足的问题。本文基于真实项目经验,系统梳理了迁移前的环境检查、rsync数据同步、配置修改、 阅读详情

相关推荐

docker 存储目录迁移

该命令会将一个已有的分发版本从指定的 tar 文件导入到 WSL 中,并分配一个指定的名称(在这种情况下是 "docker-desktop-data")。

March_A的博客 2980

Docker 目录占用磁盘空间太大?教你安全迁移 Docker 根目录

通过合理迁移 Docker 根目录,可以有效释放根分区压力,将大量容器与镜像数据迁移到更大更合理的挂载路径上。迁移核心步骤:清理无用资源(推荐)停止 Docker 服务使用 rsync 拷贝数据修改配置文件指向新目录重启 Docker 并验证运行正常删除旧目录释放空间。

weixin_44876263的博客 1752

阿里云linux系统挂载数据盘并且把docker工作目录迁移到数据盘

本文详细介绍了在Linux系统中挂载数据盘及迁移Docker目录的操作步骤。首先通过fdisk命令对未分区的NVMe磁盘进行分区、格式化并挂载到/mnt目录,设置开机自动挂载。然后将Docker数据目录从系统盘迁移到数据盘:先停止Docker服务,移动数据到/mnt/Docker_data,针对不同Docker版本采用不同配置方法(旧版修改service文件,新版修改daemon.json配置),最后验证迁移是否成功并确保开机自启。操作过程涵盖了磁盘管理、Docker配置修改及服务管理等多个环节。

所有文章免费阅读,请支持免费精神,为我评论和点赞。 1753

【简单快速】windows中docker数据如何从C盘迁移到其他盘

本文详细介绍了如何将Windows系统中Docker默认存储在C盘的数据迁移到其他磁盘。作者指出Docker数据常占用大量C盘空间,通过WSL命令分步骤实现:先导出数据为tar包,注销原发行版,再导入到目标磁盘。重点讲解了docker-desktop(系统进程)和docker-desktop-data(镜像/容器数据)的区别,强调后者是迁移关键。该方法安全可靠,能有效释放C盘空间,同时保留所有Docker数据。文末还推荐了相关磁盘管理工具和热门技术文章。

RenGJ010617的博客 5499

docker学习之迁移目录

之前docker默认安装在系统盘,现在系统盘要爆了,加了个数据盘,现在要将docker迁移到数据盘上去。。 占用情况 查看占用内存,–max-depth=1表示层数为1,/var/lib/docker是docker默认储存路径 sudo du -h --max-depth=1 /var/lib/docker 惊奇的发现,/var/lib/docker/overlay2占了14G,系统盘总共才40G呀喂。 移动docker 首先挂载开机自动挂载数据盘的事情就不说了,现在默认已经挂载好了数据盘,而且数据盘的地

qq_33619359的博客 778

告别以太网瓶颈:手把手教你为AI训练集群搭建InfiniBand网络(以NVIDIA DGX A100/H100为例)

本文详细指导如何为AI训练集群搭建InfiniBand网络,解决以太网瓶颈问题,特别针对NVIDIA DGX A100/H100系统。通过硬件选型、网络架构设计和性能调优,显著提升多机多卡训练效率,适用于大规模模型训练场景。

weixin_30336061的博客 311

更改docker默认数据目录,修改docker默认存储目录/var/lib/docker,docker常用文件系统类型,docker默认数据目录迁移,docker离线下载地址,rsync离线下载及安装

更改docker默认数据目录,修改docker默认存储目录/var/lib/docker,修改docker配置,docker默认数据目录迁移,docker离线下载地址。 step1: 停止docker服务,step2: 备份/复制/迁移默认数据目录,step3: 修改docker默认数据目录配置,step4: 启动docker服务,step5: 查看效果,step6: 验证历史容器 作者发现很多这类文章都没讲重点注意事项,如:复制或备份docker文件时一定要保留对象属性等。所以本文标题有提rsync

搬砖工 1597

反激开关电源变压器设计实例讲解(定明芳)

内容来自《反激变压器的设计》(定明芳主讲)。 定名芳老师主要讲了10步,最后应该还有一步,线径的选择已经绕制方式。这里进行了记录整理,把一些公式来源进行了推导。所有的设计都是基于理论计算。 1.确定电源规格 2.确定工作频率和最大占空比 3.计算匝比(利用伏秒平衡原则) 此处插入解释一下伏秒平衡,根源是磁通量平衡。该原则可以用来检查MOS管耐压是否够。 4.计算初级线圈峰值电流 基于CCM模式计算的。ip1是开关管要关闭时的峰值电流,ip2是开关管开始导通时的起始电流。因为时CCM模式,所以,ip

ydgd118的博客 5万+

修改Docker存储目录:Docker存储路径Docker数据迁移Docker存储位置/etc/docker/daemon.json、docker占用docker容量docker迁移data-root

选择哪种方法取决于你的具体需求和你对系统的控制级别。如果你希望通过 Docker 自身的配置来管理,使用。

Dontla的博客 1万+

Calibre LVS效率翻倍秘籍:用Hierarchical Flow处理亿级晶体管设计的5个关键阶段

本文详细解析了如何利用Hierarchical Flow技术提升Calibre LVS在亿级晶体管SoC设计中的验证效率。通过五个关键阶段的分层验证流程,包括顶层抽象验证、模块级独立验证等,可显著降低内存占用40-60%,缩短迭代周期50-70%,特别适用于SMIC等先进工艺节点。文章还分享了算力资源优化、并行化处理等实战技巧,帮助工程师应对大规模芯片验证挑战。

sam99的博客 768

dpdk 源码分析 rte_ring

rte_ring源码分析

qq_40843445的博客 929

Docker数据存储目录迁移

迁移docker存储数据var/lib/docker默认目录,解决/目录存储空间过小的问题

qq_43142346的博客 2401

PCB光绘文件DFM检查:从Gerber验证到制造闭环

Gerber文件是PCB设计交付制造的核心数据载体,其准确性直接决定硬件可制造性与量产良率。理解Gerber格式规范、IPC网表比对原理及DFM(Design for Manufacturability)自动检测逻辑,是电子工程师保障设计落地的关键能力。通过电气连通性验证、物理DRC规则扫描与工艺兼容性分析,DFM工具能提前识别开路、短路、孔环不足、阻焊异常等典型问题,避免投板后返工甚至批量报废。在国产化替代趋势下,华秋DFM等平台已深度适配Altium Designer工作流,支持一键导入、智能报告与协同

weixin_42620563的博客 507

Docker Desktop 数据迁移完整流程(Windows 10/11 x64)

两台机器都是 Windows 10 / 11 x64拥有管理员权限旧机器已安装 WSL 功能。

一千个读者就有一千个哈姆雷特 814

LC与RC滤波电路实战对比:从原理到选型指南

本文深入对比了LC与RC滤波电路的核心原理与实战应用。LC滤波利用电感与电容的无损能量搬运,适合高频、大电流电源滤波,效率高但需注意谐振风险;RC滤波通过电阻消耗能量实现滤波,结构简单、成本低,适用于低频信号处理或小电流供电场景。文章提供了从工作原理、性能维度到具体选型的完整指南,帮助工程师根据项目需求(如频率范围、负载电流、效率)做出精准选择。

weixin_29240711的博客 499

【Burp入门第三十七篇】AutoRepeater插件安装使用教程+越权实战案例

AutoRepeater 通过接收满足特定条件的请求,按照预设的基础替换规则对请求进行处理。在接收到匹配请求后,它首先应用基础替换,然后针对每个定义的替换创建请求副本并应用该替换操作,从而实现对不同参数的修改和请求的重复发送,以此来全面检测 Web 应用的授权情况。1、自动化请求重复:能自动复制、修改并重发 HTTP 请求,避免了手动重复操作的繁琐,大大提高了 Web 应用授权测试的效率。2、灵活参数替换:可灵活改变邮箱地址、账号身份、角色、URL 和 CSRF 令牌等关键参数。

等风来 2035

Docker 目录迁移脚本【Windows Junction 类型链接】

Docker 目录迁移脚本【Windows Junction 类型链接】

AITechLab 的博客 1205

8.9华为OD机试真题 新系统 - 灯带颜色变换 (Java/Py/C/C++/Js/Go)

8.9华为OD机试真题 新系统 - 灯带颜色变换 (Java/Py/C/C++/Js/Go)

算法大师! 670

linux centos7 安装 docker 和迁移数据目录

删除docker yum remove docker yum remove docker docker-common docker-selinux 安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 设置yum源库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum-config-manag

gaodaojiang2015的博客 1003

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

两种方法迁移 Docker 的默认安装(存储)目录【转载】

如果是通过 Ubuntu 的 apt-get 安装的 Docker,默认的安装目录应该是:/var/lib/docker。 为了完全确定,可以使用以下的命令查询真正的安装路径: sudo docker info | grep "Docker Root Dir" 前置工作 下文以 /store/software/docker 这个路径作为要迁移的新 Docker 安装(存储)目录 在开始迁移之前,首先复制原 Docker 安装(存储)目录到新的路径下: cp -a /var/lib/docker /

dgqg1223 8055

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

docker 数据文件迁移,harbor安装

docker info|grep ‘Docker Root Dir’ #显示:Docker Root Dir: /mnt/data01/soft/docker 表示成功!将数据目录从/var/lib/docker 迁移修改为/mnt/data01/soft/docker。“data-root”: “/mnt/data01/soft/docker” #重启 docker。经测试"data-root": “/mnt/data01/soft/docker”,好用。在EXECStart后面添加。

qq_45158424的博客 432

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Docker迁移默认的/var/lib/docker目录

【代码】Docker迁移默认的/var/lib/docker目录。

769

如何将docker数据目录迁移到新磁盘

然后就可以迁移 Docker 数据到 /mnt/vdb/docker了,参考一、迁移步骤,将/mnt/disk2更换为/mnt/vdb。可以看出系统里有两块磁盘,vda是系统盘,vdb目前显示为disk类型,没有分区、没有格式化、没有挂载点,只是被系统识别到了。这里可以看到有一个磁盘 sda,分成两个分区:sda1 挂载到根目录 /,sda2 挂载到 /mnt/disk2。fdisk /dev/vdb # 新建分区,例如 /dev/vdb1。用 rsync 保留权限和符号链接。

OfficeWeb365的博客 205

WSL2 + Docker Desktop 4.27 双路径配置:安装目录与镜像存储分离迁移指南

本文详细介绍了如何在WSL2环境下配置Docker Desktop 4.27,实现安装目录与镜像存储路径的分离迁移。通过使用mklink创建目录联结和WSL2数据导出导入技术,有效解决C盘空间不足问题,提升系统性能和管理灵活性。

weixin_33770878的博客 382

将docker 目录移至其它目录

1.停止docker 应用 systemctl stop docker 2.确认是否关闭成功 systemctl status docker 3.创建用来放docker目录的文件夹,我这里是/data/docker [root@iZuf6j7q6u3zz6203my9b5Z data]# mkdir docker [root@iZuf6j7q6u3zz6203my9b5Z data]# ll total 20 drwxr-xr-x 2 root root 4096 Aug 31 09:52

feng271374203的博客 1217

Windows 11 安装配置 Docker Desktop 并部署 sqlbot 完整指南

本文操作环境为Windows 11 22H2 及以上版本台式 / 笔记本电脑,硬件已开启 CPU 虚拟化(Intel VT‑x/AMD‑V),系统已启用 “适用于 Linux 的 Windows 子系统” 与 “虚拟机平台” 功能。全程基于WSL 2运行 Docker Desktop,搭配 PowerShell 执行命令,存储路径可灵活迁移至 D 盘 / E 盘等非系统盘,适配国内网络环境配置镜像加速,最终在该环境下完成sqlbot v1.6.0离线镜像导入与容器化部署,实现本地 8000 端口正常访问使用

laowang的博客 1168
上一篇: centos7docker 安装redis 并配置远程链接
喵程序
博客等级 码龄7年 32粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值