在 Ubuntu 上迁移 Docker(包括 Docker 数据、镜像、容器、卷等),通常有以下几种常见场景。下面按最常用、最安全的方式给你说明。
Docker 默认数据目录是:
/var/lib/docker
如果你要把 Docker 从 系统盘迁移到大磁盘,推荐做法如下。
sudo systemctl stop docker
sudo systemctl stop docker.socket
确认已停止:
sudo systemctl status docker
例如迁移到 /data/docker:
sudo mkdir -p /data/docker
⚠️ 一定要用 rsync,不要直接 cp
sudo rsync -avzP /var/lib/docker/ /data/docker/
参数说明:
-a:保留权限、时间、软链接-v:显示过程-P:断点续传编辑(不存在就新建):
sudo vim /etc/docker/daemon.json
添加或修改:
{
"data-root": "/data/docker"
}
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl start docker
docker info | grep "Docker Root Dir"
输出应为:
Docker Root Dir: /data/docker
✅ 成功后可以删除旧目录(确认无误后):
sudo rm -rf /var/lib/docker
docker images
docker save -o myimages.tar image1 image2
docker export 容器名 > 容器名.tar
scp myimages.tar user@new_server:/opt/
docker load -i myimages.tar
rsync -avzP /var/lib/docker/ new_server:/var/lib/docker/
⚠️ 新服务器 Docker 版本要一致,否则可能出问题。
如果只是迁移某个项目:
docker compose down
拷贝项目目录:
scp -r /opt/myproject user@new_server:/opt/
新服务器:
cd /opt/myproject
docker compose up -d
docker volume ls
docker run --rm -v 卷名:/data -v $(pwd):/backup busybox \
tar czf /backup/volume.tar.gz -C /data .
docker run --rm -v 卷名:/data -v $(pwd):/backup busybox \
tar xzf /backup/volume.tar.gz -C /data
daemon.jsonjournalctl -u docker -f
docker system df
docker system prune -a
| 场景 | 推荐方式 |
|---|---|
| Docker 目录迁移 | 修改 data-root |
| 服务器迁移 | 镜像导出 / 卷备份 |
| 单项目迁移 | docker compose |
| 同系统整机迁移 | rsync /var/lib/docker |
如果你能告诉我:
我可以给你 精确到命令级别 的方案。