全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 5 分钟 ✍️ juanwangdev

数据迁移与克隆

容器数据需要迁移和备份,下面介绍 Docker 数据迁移方法。

docker cp 命令

容器到宿主机

Bash
# 拷贝容器文件到宿主机
docker cp my-container:/app/data ./data

# 拷贝目录
docker cp my-container:/var/lib/mysql ./mysql-backup

宿主机到容器

Bash
# 拷贝宿主机文件到容器
docker cp ./config.yml my-container:/app/config.yml

# 拷贝目录
docker cp ./data my-container:/app/data

docker cp 类似 scp,支持容器与宿主机之间文件传输。

Volume 备份

备份数据卷

Bash
# 创建临时容器备份
docker run --rm \
  -v my-volume:/data \
  -v $(pwd):/backup \
  alpine \
  tar czf /backup/volume-backup.tar.gz -C /data .

# 输出: volume-backup.tar.gz

恢复数据卷

Bash
# 创建新卷
docker volume create new-volume

# 从备份恢复
docker run --rm \
  -v new-volume:/data \
  -v $(pwd):/backup \
  alpine \
  tar xzf /backup/volume-backup.tar.gz -C /data

容器迁移

导出容器

Bash
# 导出容器为 tar 包
docker export my-container > container.tar

# 查看导出内容
tar -tf container.tar

导入容器

Bash
# 导入为镜像
docker import container.tar my-image:latest

# 指定标签
docker import -c 'CMD ["/bin/bash"]' container.tar my-image:latest

docker export/import 导出文件系统,不包含元数据(端口、环境变量等)。

镜像迁移

保存与加载

Bash
# 保存镜像为 tar 包
docker save my-image:latest > image.tar

# 加载镜像
docker load < image.tar

# 查看加载的镜像
docker images

docker save/load 保存完整镜像(包含层和元数据),推荐用于迁移。

推送到仓库

Bash
# 标记镜像
docker tag my-image:latest registry.example.com/my-image:latest

# 推送
docker push registry.example.com/my-image:latest

# 拉取
docker pull registry.example.com/my-image:latest

环境克隆

克隆容器

Bash
# 从容器创建镜像
docker commit my-container cloned-image:latest

# 运行克隆
docker run -d --name cloned-container cloned-image:latest

docker commit 保留容器当前状态,但不包含数据卷内容。

完整迁移示例

Bash
# 1. 备份数据卷
docker run --rm -v db-data:/data -v $(pwd):/backup alpine \
  tar czf /backup/db-data.tar.gz -C /data .

# 2. 保存镜像
docker save postgres:15 > postgres.tar

# 3. 迁移到新主机
scp db-data.tar.gz postgres.tar user@new-host:~

# 4. 新主机恢复
docker load < postgres.tar
docker volume create db-data
docker run --rm -v db-data:/data -v $(pwd):/backup alpine \
  tar xzf /backup/db-data.tar.gz -C /data

# 5. 启动容器
docker run -d --name db -v db-data:/var/lib/postgresql/data postgres:15

要点总结

  • docker cp 在容器与宿主机之间拷贝文件
  • Volume 备份使用临时容器 + tar 打包
  • docker export/import 导出文件系统,不含元数据
  • docker save/load 保存完整镜像,推荐用于迁移
  • docker commit 克隆容器状态,但不包含数据卷

📝 发现内容有误?点击此处直接编辑

← 上一篇 存储驱动选择
下一篇 → 外部日志聚合
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库