Docker 修改存储位置(data-root 迁移完整指南)

适用于 Linux + systemd 环境(CentOS / RHEL / Ubuntu / Debian 等)


一、迁移背景

Docker 默认数据目录:

/var/lib/docker

当系统盘空间不足时,通常需要将其迁移至数据盘,例如:

/mnt/data/docker-data

二、迁移前检查(强烈建议)

1️⃣ 查看当前 Docker 数据目录

docker info | grep "Docker Root Dir"

默认一般为:

Docker Root Dir: /var/lib/docker

2️⃣ 查看磁盘使用情况

df -h
du -sh /var/lib/docker

确认目标磁盘空间足够。


三、正式迁移步骤


步骤 1:停止 Docker 服务

⚠️ 必须先停止,否则可能造成数据损坏。

sudo systemctl stop docker

确认已停止:

sudo systemctl status docker

步骤 2:创建新数据目录

例如迁移到:

/mnt/data/docker-data

创建目录:

sudo mkdir -p /mnt/data/docker-data

设置权限(推荐):

sudo chown -R root:root /mnt/data/docker-data
sudo chmod 711 /mnt/data/docker-data

步骤 3:迁移数据(推荐使用 rsync)

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

参数说明:

  • -a 保留权限、软链接、时间戳
  • -P 显示进度 + 支持断点续传

⚠️ 注意:路径末尾 / 很重要。

等待数据复制完成。


步骤 4:修改 Docker 配置

编辑或创建配置文件:

sudo vim /etc/docker/daemon.json

添加或修改为:

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

⚠️ 如果文件中已有其他配置,确保 JSON 格式正确,例如:

{
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"],
  "data-root": "/mnt/data/docker-data"
}

可以使用以下命令验证 JSON 格式:

cat /etc/docker/daemon.json | python -m json.tool

步骤 5:重新加载并启动 Docker

sudo systemctl daemon-reload
sudo systemctl start docker

检查状态:

sudo systemctl status docker

步骤 6:验证是否迁移成功

docker info | grep "Docker Root Dir"

确认输出为:

Docker Root Dir: /mnt/data/docker-data

再查看容器是否正常:

docker ps -a

步骤 7:确认无误后删除旧目录(可选)

⚠️ 确认 Docker 正常运行后再执行。

sudo rm -rf /var/lib/docker

四、常见问题排查


1️⃣ Docker 启动失败

查看日志:

journalctl -u docker -xe

常见原因:

  • JSON 格式错误
  • 目标目录权限不对
  • SELinux 限制(CentOS)

若开启 SELinux,可执行:

sudo chcon -Rt svirt_sandbox_file_t /mnt/data/docker-data

2️⃣ 容器丢失

如果容器不见了:

  • 检查 data-root 是否写错
  • 检查 rsync 是否完整复制

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐