Windows实用技巧

备份恢复Docker镜像

admin · 9月18日 · 2025年 · · · 本文共1492个字 · 预计阅读5分钟 226次已读
Write-Host "=== Docker 镜像备份/恢复脚本 ==="
Write-Host "1) 保存所有镜像"
Write-Host "2) 恢复所有镜像"
$choice = Read-Host "请输入选项 (1 或 2)"

if ($choice -eq "1") {
    $images = docker images --format "{{.Repository}}:{{.Tag}}"
    foreach ($image in $images) {
        if ($image -ne "<none>:<none>") {
            $safeName = $image -replace "[/:]", "_"
            $fileName = "$safeName.tar"
            Write-Host "正在保存 $image 到 $fileName ..."
            docker save -o $fileName $image
        }
    }
    Write-Host "✅ 所有镜像已保存完成!"
}
elseif ($choice -eq "2") {
    Get-ChildItem *.tar | ForEach-Object {
        Write-Host "正在导入 $($_.Name) ..."
        docker load -i $_.Name
    }
    Write-Host "✅ 所有镜像已导入完成!"
}
else {
    Write-Host "❌ 输入无效,请输入 1 或 2"
}

保存成 docker-backup.ps1,右键 → 用 PowerShell 运行,在预存放镜像文件夹里运行。

保存成 docker-backup.sh,然后赋予执行权限:

chmod +x docker-backup.sh
./docker-backup.sh
#!/bin/bash
echo "=== Docker 镜像备份/恢复脚本 ==="
echo "1) 保存所有镜像"
echo "2) 恢复所有镜像"
read -p "请输入选项 (1 或 2): " choice

if [ "$choice" == "1" ]; then
    images=$(docker images --format "{{.Repository}}:{{.Tag}}")
    for image in $images; do
        if [[ "$image" != "<none>:<none>" ]]; then
            safeName=$(echo $image | tr '/:' '_')
            fileName="${safeName}.tar"
            echo "正在保存 $image 到 $fileName ..."
            docker save -o "$fileName" "$image"
        fi
    done
    echo "✅ 所有镜像已保存完成!"
elif [ "$choice" == "2" ]; then
    for file in *.tar; do
        echo "正在导入 $file ..."
        docker load -i "$file"
    done
    echo "✅ 所有镜像已导入完成!"
else
    echo "❌ 输入无效,请输入 1 或 2"
fi

默认会把镜像保存成 .tar 文件,存放在 你运行脚本的当前目录

  • 如果你在 Windows 上,进入 D:\backup\ 文件夹,然后运行 docker-backup.ps1
    → 镜像会保存到 D:\backup\ 下面。
  • 如果你在 Linux / Mac 上,在 /home/user/docker-backup/ 文件夹执行
    → 镜像会保存到 /home/user/docker-backup/ 目录下。

脚本会把镜像名里的 /: 替换成 _,比如:

  • nginx:latestnginx_latest.tar
  • mysql:8.0mysql_8.0.tar
  • myrepo/app:v1.2myrepo_app_v1.2.tar

0 条回应