如果你的 Docker 已经运行了一段时间,并且存储在 /var/lib/docker 目录下的镜像、容器、网络、builder 等数据需要完整迁移到 /data/docker,你可以按照以下步骤安全地完成迁移,而不会丢失任何数据。
如果全新部署一套服务器的时候,我们要如何来处理这样的情况。
我们一般都会购买一个可扩展的硬盘,挂载到/data/上。
是不是安装完docker就去设置这个选项。
⸻
完整迁移 Docker 数据到 /data
步骤 1:停止 Docker
为了避免数据损坏,首先停止 Docker 服务:
sudo systemctl stop docker
⸻
步骤 2:复制现有数据到新目录
1. 创建目标目录
sudo mkdir -p /data/docker
2. 使用 rsync 复制数据(rsync 保留权限并支持增量同步)
sudo rsync -aAX /var/lib/docker/ /data/docker/
这个命令会确保 /var/lib/docker/ 下的所有数据,包括镜像、容器、卷、网络等完整复制到 /data/docker/。
⸻
步骤 3:修改 Docker 配置
1. 编辑 daemon.json
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
添加或修改以下内容:
{
“data-root”: “/data/docker”
}
⸻
步骤 4:重启 Docker 并验证
1. 重新启动 Docker
sudo systemctl restart docker
2. 检查数据是否迁移成功
docker info | grep “Docker Root Dir”
确保输出:
Docker Root Dir: /data/docker
3. 列出 Docker 容器,确保它们仍然可用
docker ps -a
你的所有容器、镜像、网络、builder 都应该保持原样。
⸻
步骤 5(可选):删除旧数据
如果确认一切正常,你可以删除旧数据释放空间:
sudo rm -rf /var/lib/docker.bak
⸻
如果 /data 是新挂载的硬盘
如果 /data 是新硬盘,你可以先格式化并挂载:
sudo mkfs.ext4 /dev/sdX # 请替换 /dev/sdX
sudo mount /dev/sdX /data
echo “/dev/sdX /data ext4 defaults 0 2” | sudo tee -a /etc/fstab
然后执行上述迁移步骤。
⸻
结论
✅ 这种迁移方式可以安全地保留现有的 Docker 容器、镜像、builder 数据,而不会影响运行环境。
🚀 如果你担心风险,可以先备份 /var/lib/docker/,然后再执行迁移。
在全新部署服务器时,如果你已经计划好使用 /data 作为 Docker 的存储目录,那么你可以在安装 Docker 之后立即进行配置,而无需担心迁移数据的问题。以下是推荐的流程:
⸻
💡 全新部署 Docker 并将数据存储在 /data
步骤 1:挂载 /data 磁盘
1. 查看新硬盘
lsblk
假设新磁盘是 /dev/sdb,则继续执行以下步骤。
2. 格式化磁盘
sudo mkfs.ext4 /dev/sdb
3. 挂载磁盘
sudo mkdir -p /data
sudo mount /dev/sdb /data
4. 设置开机自动挂载
echo “/dev/sdb /data ext4 defaults 0 2” | sudo tee -a /etc/fstab
⸻
步骤 2:安装 Docker
如果尚未安装 Docker,可使用以下命令:
curl -fsSL https://get.docker.com | sudo bash
或者使用官方的方式:
sudo apt-get update
sudo apt-get install -y docker.io
⸻
步骤 3:配置 Docker 存储目录
1. 创建 Docker 配置文件
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
2. 添加以下内容
{
“data-root”: “/data/docker”
}
3. 保存并退出 (Ctrl+X → Y → Enter)
⸻
步骤 4:启动 Docker
sudo systemctl restart docker
sudo systemctl enable docker
⸻
步骤 5:验证
1. 检查 Docker 是否使用 /data/docker
docker info | grep “Docker Root Dir”
输出应类似:
Docker Root Dir: /data/docker
2. 运行测试容器
docker run —rm hello-world
确保 Docker 正常运行,并且 /data/docker 目录下已经存储了容器数据。
⸻
💡 结论
• 是的,全新安装 Docker 后,应该立即设置 data-root,这样 Docker 就不会默认存储在 /var/lib/docker 了。
• 如果 /data 是新挂载的硬盘,需要提前格式化并挂载,确保 /etc/fstab 里有对应的自动挂载项。
• 这样做的好处是,你的容器、镜像、网络等所有 Docker 数据都可以存放在 /data/docker,以后可以方便地扩展存储。 🚀
power by ChatGPT