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

 更新时间:2025年08月30日 08:46:46   作者:超龄超能程序猿  
本文介绍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
  • 权限不足:新目录需与原目录权限一致(通常为root:root,权限 700):
#方案一/二通用,替换路径为你的新目录

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

sudo chmod -R 700 /data/docker
  • 配置格式错误(仅方案二)daemon.json格式错误会导致启动失败,可通过以下命令检查格式:
#安装jq工具(若未安装)

sudo apt install jq  # Ubuntu/Debian

#或 sudo yum install jq  # CentOS/RHEL

#检查配置文件格式

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

2. 个性问题

  • 软链接无效(方案一)ls -l /var/lib/docker 若显示 “broken link”,需重新创建软链接(确保新目录路径正确,无拼写错误)。
  • 旧目录残留(方案二):迁移后/var/lib/docker可能为空目录(因已移动),可手动删除(需确认备份完成):sudo rm -rf /var/lib/docker

操作总结

两种方案核心差异

  • 软链接方案靠 “路径跳转”,无需改配置,适合临时场景;
  • 配置修改方案靠 “主动指定新路径”,长期稳定,适合生产环境。

必遵循的核心原则

  • 无论哪种方案,必须先停止 Docker 服务(运行中移动会导致数据损坏);
  • 务必备份原目录(迁移失败可恢复,尤其生产环境);
  • 新目录需满足 “空间充足 + 权限正确(root:root,700)+ 路径稳定”。

选择建议

  • 临时扩展磁盘、快速迁移:选软链接方案;
  • 生产环境、长期固定新路径:选配置修改方案。

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

相关文章

  • docker部署的mysql默认密码如何查看

    docker部署的mysql默认密码如何查看

    在使用Docker来部署MySQL数据库时,有时候我们希望能够指定一个初始密码来保护数据库的安全性,下面这篇文章主要给大家介绍了关于docker部署的mysql默认密码如何查看的相关资料,需要的朋友可以参考下
    2024-05-05
  • docker安装nginx容器的方法

    docker安装nginx容器的方法

    Nginx也是一款服务器,我们常用它做如:反向代理、负载均衡、动态与静态资源的分离的工作,这篇文章主要介绍了docker安装nginx,需要的朋友可以参考下
    2023-01-01
  • docker 限制容器对CPU的使用

    docker 限制容器对CPU的使用

    本篇文章主要介绍了docker 限制容器对CPU的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • docker快速入门教程

    docker快速入门教程

    这篇文章主要为大家详细介绍了docker快速入门教程,知识结构简单,对docker有一个初步的认识,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Docker 本地导入镜像/保存镜像/载入镜像/删除镜像的方法

    Docker 本地导入镜像/保存镜像/载入镜像/删除镜像的方法

    这篇文章主要介绍了Docker 本地导入镜像/保存镜像/载入镜像/删除镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • SpringCloud基于Docker和Docker-Compose的项目部署过程

    SpringCloud基于Docker和Docker-Compose的项目部署过程

    本文介绍了如何卸载旧版本Docker、更新系统、安装Docker及其依赖,并设置国内镜像源以加快下载速度,详细说明了如何安装Docker Compose、配置镜像加速器,并展示了如何使用Docker Compose部署SpringCloud项目,提供了更新和重启容器的方法
    2024-10-10
  • Docker buildx构建多平台镜像并推送到私有仓库的方法

    Docker buildx构建多平台镜像并推送到私有仓库的方法

    这篇文章主要介绍了Docker buildx构建多平台镜像并推送到私有仓库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • docker registry 镜像同步的实现思路

    docker registry 镜像同步的实现思路

    这篇文章主要介绍了docker registry 镜像同步的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • docker安装Wordpress速度过慢的问题解决方法

    docker安装Wordpress速度过慢的问题解决方法

    Docker是一种开源的容器化平台,可以帮助开发者将应用程序及其依赖项打包成一个独立的容器,,WordPress是一个流行的开源内容管理系统(CMS),用于创建和管理网站,本文给大家介绍了docker安装Wordpress速度过慢的问题解决方法,需要的朋友可以参考下
    2024-05-05
  • docker部署mysql 实现远程连接的示例代码

    docker部署mysql 实现远程连接的示例代码

    这篇文章主要介绍了docker部署mysql 实现远程连接的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09

最新评论