docker镜像迁移到data盘

要将Docker的存储位置从/var/lib/docker​更改到data数据盘,需要添加data-root​配置。以下是完整步骤:

1. 首先检查data数据盘挂载情况

df -h

找到data数据盘挂载点(通常是/data​、/mnt/data​等)

2. 停止Docker服务

systemctl stop docker

3. 备份当前配置

cp /etc/docker/daemon.json /etc/docker/daemon.json.bak

4. 编辑daemon.json配置文件

nano /etc/docker/daemon.json

5. 添加data-root配置(保留现有镜像加速)

假设你的数据盘挂载在/data​,修改后的配置应该是:

{
  "registry-mirrors": [
    "https://docker.1ms.run/",
    "https://docker-0.unsee.tech/",
    "https://lispy.org/",
    "https://666860.xyz/",
    "https://hub.rat.dev/",
    "https://proxy.vvvv.ee/",
    "https://docker.m.daocloud.io/",
    "https://docker.tbedu.top/",
    "https://docker.xuanyuan.me/"
  ],
  "data-root": "/data/docker"
}

6. 创建新目录并设置权限

mkdir -p /data/docker
chown -R root:root /data/docker
chmod -R 700 /data/docker

7. 迁移现有Docker数据

rsync -av /var/lib/docker/ /data/docker/

8. 重启Docker服务

systemctl start docker

9. 验证配置是否生效

docker info | grep "Root Dir"

应该显示:Docker Root Dir: /data/docker

重要注意事项

  • 备份重要数据:操作前务必备份/var/lib/docker​目录
  • 磁盘空间:确保/data​分区有足够空间(至少比当前/var/lib/docker​大2倍)
  • 权限问题:新目录必须是root用户和组,权限700
  • 1Panel兼容性:1Panel会自动识别新的Docker路径,无需额外配置
  • 回滚方案:如果出错,可以恢复备份:mv /etc/docker/daemon.json.bak /etc/docker/daemon.json​ 然后重启Docker

推荐的data-root路径

根据常见配置,建议选择以下路径之一:

  • /data/docker​ - 如果data盘挂载在/data
  • /mnt/data/docker​ - 如果data盘挂载在/mnt/data
  • /home/docker​ - 如果home分区空间充足

10. 验证迁移是否成功

迁移完成后,检查目标目录是否有数据:

ls -la /data/docker/

你应该能看到类似containers​、image​、volumes​等Docker相关的目录。

11. 验证Docker是否正常工作

docker info | grep "Root Dir"
docker ps

12. 输出验证

从你的输出可以清楚地看到:

Docker Root Dir 已成功更改

Docker Root Dir: /data/docker

所有容器正常运行

CONTAINER ID   IMAGE                                 COMMAND                  CREATED        STATUS                    PORTS                                 NAMES
48bfb8ecaa7d   redis:8.4.0                           "docker-entrypoint.s…"   2 hours ago    Up 29 seconds             127.0.0.1:6379->6379/tcp              1Panel-redis-Zm4I
9cdcddbb0a3a   mysql:8.4.7                           "docker-entrypoint.s…"   22 hours ago   Up 29 seconds             127.0.0.1:3306->3306/tcp, 33060/tcp   1Panel-mysql-qg34
b1b594e80841   postgres:18.1-alpine                  "docker-entrypoint.s…"   22 hours ago   Up 29 seconds (healthy)   127.0.0.1:5432->5432/tcp              1Panel-postgresql-DLve
7864335d5b11   1panel/openresty:1.27.1.2-2-3-focal   "/usr/local/openrest…"   29 hours ago   Up 29 seconds                                                   1Panel-openresty-WH2U
4ba8bf4de384   ghcr.io/mhsanaei/3x-ui:latest         "/app/DockerEntrypoi…"   29 hours ago   Up 29 seconds                                                   3xui_app

数据迁移完整

  • rsync成功同步了所有Docker数据
  • /data/docker/目录包含所有必要的文件和子目录

13. 后续建议步骤(可选但推荐)

1. 备份原目录(安全起见)

mv /var/lib/docker /var/lib/docker.bak

2. 验证1Panel是否正常

  • 登录1Panel面板
  • 检查所有容器状态是否正常显示
  • 尝试创建一个新容器测试

3. 清理备份(确认一切正常后)

rm -rf /var/lib/docker.bak

验证成功的标志

  • docker info | grep "Root Dir"​ 显示 /data/docker
  • docker ps​ 显示所有容器正常运行
  • ✅ 新创建的容器会自动存储在 /data/docker
  • ✅ 系统盘 /var/lib/docker​ 不再增长,数据盘 /data​ 开始使用
THE END