docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker移动安装目录

Docker移动安装目录的2种实现过程

作者:超龄超能程序猿

本文介绍Docker迁移数据目录的两种方法:软链接(无需改配置,路径跳转,适合临时迁移)和配置修改(需编辑daemon.json指定新路径,长期稳定),操作需停服务、备份、确保权限与路径正确

运行Docker移动安装目录实现方案(软链接+配置修改)

一、核心前提:明确 Docker 核心目录

Docker 默认数据存储目录为 /var/lib/docker(含镜像、容器、网络、存储等核心数据),所有迁移操作均围绕该目录展开。

先通过以下命令确认目录信息:

#1. 查看默认目录是否存在

ls -ld /var/lib/docker

#2. 查看目录占用空间(新目录需至少满足此空间)

du -sh /var/lib/docker

#3. (可选)查看当前Docker数据目录配置(验证默认路径)

docker info | grep "Docker Root Dir"

二、核心原理:两种方案的底层逻辑对比

方案类型核心逻辑优势劣势适用场景
软链接方案通过ln -s创建 “旧路径→新路径” 的软链接,系统访问旧路径时自动跳转至新路径无需改配置、操作简单、可逆性强依赖新路径稳定性(如挂载盘卸载会失效)临时迁移、快速扩展、不熟悉配置修改
配置修改方案编辑 Docker 配置文件(daemon.json),指定新数据目录,Docker 直接读取新路径长期稳定、不依赖软链接、适合生产环境需修改配置、操作步骤稍多长期迁移、生产环境、新路径固定

三、方案一:软链接实现(快速迁移,无需改配置)

1. 操作步骤(同前序优化版,核心为 “移动 + 软链接跳转”)

(1)停止 Docker 服务(必做,避免数据损坏)

#适用于Ubuntu/CentOS 7+/Debian等systemd系统

sudo systemctl stop docker

sudo systemctl disable docker  # 临时禁用开机启动,防止操作中自动重启

#适用于CentOS 6等sysvinit系统

#sudo service docker stop

验证停止:sudo systemctl status docker 显示 “inactive (dead)” 即成功。

(2)备份原目录(可选但强烈建议)

#压缩备份到/root目录,文件名含日期便于区分

sudo tar -zcvf /root/docker-backup-\$(date +%Y%m%d).tar.gz /var/lib/docker

(3)移动原目录到新位置(示例新目录:/data/docker

#1. 创建新目录(父目录不存在时自动创建)

sudo mkdir -p /data/docker

#2. 移动原目录(保留文件权限、属性,比复制更安全)

sudo mv /var/lib/docker /data/docker

验证移动:ls -l /data/docker 能看到containersimages等子目录即成功。

(4)创建软链接(旧路径指向新路径)

#命令格式:ln -s 新目录 旧目录(顺序不可反!)

sudo ln -s /data/docker /var/lib/docker

验证链接:ls -l /var/lib/ | grep docker 显示 “/var/lib/docker -> /data/docker” 即正确。

(5)重启 Docker 并验证

#恢复开机启动+重启

sudo systemctl enable docker && sudo systemctl start docker

#验证功能:查看镜像、启动测试容器

sudo docker images  # 应与迁移前一致

sudo docker run --rm hello-world  # 成功输出欢迎信息即正常

四、方案二:修改配置文件(移动文件 + 指定新目录,长期稳定)

1. 操作步骤(核心为 “移动 + 配置指定新路径”)

(1)停止 Docker 服务(同方案一,必做)

sudo systemctl stop docker

sudo systemctl disable docker

(2)备份原目录(同方案一,防数据丢失)

sudo tar -zcvf /root/docker-backup-\$(date +%Y%m%d).tar.gz /var/lib/docker

(3)移动原目录到新位置(示例新目录:/home/docker

#1. 创建新目录

sudo mkdir -p /home/docker

#2. 移动原目录(与方案一一致,保留完整数据结构)

sudo mv /var/lib/docker /home/docker

(4)修改 Docker 配置文件(daemon.json

Docker 通过/etc/docker/daemon.json读取自定义配置,若文件不存在需新建:

#1. 编辑/创建配置文件(用vim或nano,示例用vim)

sudo vim /etc/docker/daemon.json

#2. 写入以下内容(指定新数据目录,路径替换为你的实际新目录)

{

 "data-root": "/home/docker"  # 关键配置:指定Docker新数据根目录

}

#3. 保存退出(vim中按Esc,输入:wq回车)

注意:若原文件已有内容(如镜像加速配置),只需新增"data-root": "新路径",保持 JSON 格式正确(逗号分隔,无多余符号)

示例:

{

 "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"],  # 原有加速配置

 "data-root": "/home/docker"  # 新增的新目录配置

}

(5)重载配置并重启 Docker

#1. 重载systemd配置(使新的daemon.json生效)

sudo systemctl daemon-reload

#2. 恢复开机启动+重启Docker

sudo systemctl enable docker && sudo systemctl start docker

(6)验证配置与数据完整性

#1. 验证新目录是否生效(查看Docker Root Dir是否为新路径)

docker info | grep "Docker Root Dir"  # 应显示“Docker Root Dir: /home/docker”

#2. 验证数据:查看镜像、容器是否正常

sudo docker images

sudo docker ps -a

#3. 测试功能:启动测试容器

sudo docker run --rm hello-world

五、两种方案的常见问题排查

1. 共性问题:Docker 启动失败

#查看日志定位原因(核心排查手段)

sudo journalctl -u docker  # systemd系统

#或查看Docker原生日志

sudo cat /var/log/docker.log
#方案一/二通用,替换路径为你的新目录

sudo chown -R root:root /data/docker  # 或/home/docker

sudo chmod -R 700 /data/docker
#安装jq工具(若未安装)

sudo apt install jq  # Ubuntu/Debian

#或 sudo yum install jq  # CentOS/RHEL

#检查配置文件格式

jq . /etc/docker/daemon.json  # 无报错则格式正确

2. 个性问题

操作总结

两种方案核心差异

必遵循的核心原则

选择建议

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文