在 CentOS 上迁移 Docker,通常指以下几种场景之一。下面按最常见需求给你系统性的迁移方案,你可以对号入座。
/var/lib/docker 迁移到新磁盘或新目录systemctl stop docker
docker info | grep "Docker Root Dir"
默认是:
/var/lib/docker
例如迁移到 /data/docker:
mkdir -p /data/docker
rsync -avzP /var/lib/docker/ /data/docker/
✅ 强烈推荐
rsync,比cp更安全
编辑(不存在就新建):
vim /etc/docker/daemon.json
添加或修改:
{
"data-root": "/data/docker"
}
systemctl start docker
docker info | grep "Docker Root Dir"
✅ 输出应为:
Docker Root Dir: /data/docker
docker images
docker save nginx:latest > nginx.tar
scp nginx.tar root@new_server:/root/
docker load < nginx.tar
⚠️ 容器状态不会保留(需重新 run)
systemctl stop docker
tar czf docker.tar.gz /var/lib/docker
systemctl stop docker
rm -rf /var/lib/docker
tar xzf docker.tar.gz -C /
systemctl start docker
✅ 容器、镜像、volume 全部保留
查看 volume:
docker volume ls
迁移 volume 目录:
/var/lib/docker/volumes/
docker commit my_container my_image
docker save my_image > my_image.tar
scp -r /opt/myapp root@new_server:/opt/
cd /opt/myapp
docker-compose up -d
/mnt/newdisk/var/lib/docker → /mnt/newdisk/dockerdaemon.jsondocker logs 容器名
journalctl -u docker
setenforce 0
# 或
chcon -Rt svirt_sandbox_file_t /data/docker
| 场景 | 推荐方案 |
|---|---|
| 磁盘满了 | 迁移 data-root |
| 换服务器 | 镜像导出 / 全量拷贝 |
| 保留容器状态 | 拷贝 /var/lib/docker |
| 生产环境 | volume + compose |
如果你愿意,可以告诉我:
我可以给你 精确到命令级别 的迁移方案。