如何在PowerShell中通过SSH将大文件传输至Linux加载Docker镜像?
解决方案
修复原PowerShell命令的问题
你原命令里的-Raw参数是核心问题——它会把整个二进制镜像文件一次性加载到内存中,大体积镜像必然导致内存占用过高、程序挂起。只需去掉该参数,就能让命令以流式方式处理文件:
Get-Content -Path C:\temp\my_docker_image.tar.gz -Encoding Byte | ssh -l matt 192.168.1.250 docker image load
-Encoding Byte保证文件以二进制格式读取,去掉-Raw后,Get-Content会分块读取并输出内容,数据流直接通过管道传递给ssh,不会在内存中缓存整个文件。
更高效的替代方案
如果想进一步降低开销,可以直接让ssh进程读取本地文件,跳过PowerShell管道中转,用Start-Process的重定向功能实现:
Start-Process -NoNewWindow -Wait ssh -ArgumentList "-l matt 192.168.1.250 docker image load" -RedirectStandardInput "C:\temp\my_docker_image.tar.gz"
这个命令让ssh直接从指定文件读取输入,避免了PowerShell处理二进制流的额外消耗,对超大镜像文件更友好。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

