powershell 不直接迁移 windows 容器,而是通过导出镜像(docker save)、传输(copy-item)、导入(docker load)和重建(docker run)实现跨节点复现,需确保宿主机 os 版本、内核兼容性及卷路径一致。
powershell 本身不直接迁移 windows 容器(如基于 windows server 或 nano server 的容器),因为容器是轻量级、无状态的运行时实例,标准做法不是“迁移”正在运行的容器,而是通过镜像 + 编排方式在新节点上重建。但你可以用 powershell 自动化整个流程:导出镜像、传输、导入、启动,并配合容器注册表或本地存储实现可靠复现。
导出与传输容器镜像
Windows 容器镜像本质是分层的 OCI 镜像,可用 docker save 导出为 tar 文件(注意:需在安装了 Docker Desktop 或 Moby Engine 的 Windows 主机上操作):
- 确认 Docker 服务已运行:
Get-Service docker | Start-Service - 导出指定镜像(例如
myapp:1.0):docker save myapp:1.0 -o C:imagesmyapp-1.0.tar - 用 PowerShell 复制到目标节点:
Copy-Item "C:imagesmyapp-1.0.tar" "\TargetNodeC$images"
在目标节点导入并运行
目标节点需已安装相同版本的 Docker 引擎(支持 Windows 容器):
- 导入镜像:
docker load -i C:imagesmyapp-1.0.tar - 启动容器(保留网络/卷配置):
docker run -d --name myapp-prod -p 8080:80 --network nat myapp:1.0 - 可封装为脚本,自动检查依赖项:
if (!(Get-Command docker -ErrorAction SilentlyContinue)) { throw "Docker not found" }
用 PowerShell 管理容器生命周期(替代手动操作)
若使用 Windows Container Runtime(非 Docker),或需集成进 CI/CD 流程,推荐结合以下操作:
- 用
Get-Container/Stop-Container(需 Containers 模块)管理本地容器实例 - 调用
Invoke-WebRequest从私有 registry 拉取镜像:docker pull contosoregistry.azurecr.io/myapp:1.0 - 配合
Start-Process启动容器并捕获日志路径,便于后续监控
注意事项与避坑点
Windows 容器迁移不是虚拟机迁移,不能直接移动运行中实例。关键约束包括:
- 宿主机 OS 版本必须匹配(如 Windows Server 2022 容器不能在 2019 上运行)
- 镜像内核版本需兼容目标节点的
containerd或dockerd运行时 - 挂载的卷(
-v)需提前在目标节点创建对应路径或改用命名卷 - 避免使用
docker commit保存运行中容器状态——这违背容器不可变原则,应通过配置文件+镜像重建实现一致性











