Windows
10/11离线安装Docker

Desktop完整指南(含WSL2配置避坑)
在企业的研发环境或某些高度保密的项目中,网络访问常常受到严格限制。
对于习惯了云端一键安装的开发者而言,当需要在这样的“信息孤岛”中搭建现代化的容器化开发环境时,往往会感到束手无策。
Docker
Desktop作为本地容器开发的事实标准,其便捷性很大程度上依赖于网络。
但现实是,无论是出于安全合规、网络隔离还是单纯的物理环境限制,离线部署的需求真实存在且日益增长。
这篇文章就是为你——那些需要在无网络或内网环境中,为团队或个人工作站部署Docker
Desktop的IT运维工程师和资深开发者——准备的实战手册。
我们将彻底告别简单的步骤罗列,深入探讨如何像一个经验丰富的系统工程师那样,通过一个U盘,将完整的Docker生态“搬运”到目标机器上。
整个过程不仅涉及文件转移,更核心的是要预判并解决Windows系统底层复杂的依赖关系,尤其是Hyper-V与WSL2这两个重量级虚拟化技术可能引发的冲突。
我们会一步步拆解,从离线包的获取、系统功能的精准配置,到安装后各种“坑”的排查与填平,确保你在没有网络求助的情况下,也能独立完成整个部署。
1.
离线部署前的精密准备:不只是下载文件
很多人认为离线安装就是“下载安装包,然后拷贝过去运行”。
这种想法在简单的桌面软件上或许行得通,但对于Docker
Desktop这样深度集成系统虚拟化功能的复杂应用来说,是远远不够的。
准备阶段的核心在于构建一个完整、版本匹配且包含所有必要依赖的离线资源包,并预先对目标机器的系统状态进行诊断。
1.1
构建离线资源包:获取正确的“零件”
你需要在一台有网络的“工作机”上,准备以下所有组件。
请务必记录每个组件的具体版本号,这是后续排查问题的关键。
- Docker
Desktop
这是主程序。
访问Docker官网的下载页面,但注意不要直接点击下载,因为那通常会触发在线安装器。
你需要寻找带有“
DockerDesktop
Installer.exe”字样的独立离线安装包。
对于Windows,文件名通常类似
DockerDesktop
Installer-4.xx.x.exe。
一个更可靠的方法是通过官方的GitHub
releases页面获取。
- WSL2
Linux内核更新包
:Desktop依赖于WSL2后端。
即使目标系统已启用WSL,也可能需要更新其内核。
你必须下载微软官方提供的独立更新包
wsl_update_x64.msi。 - 一个Linux发行版镜像
虽然Docker
Desktop安装时会尝试下载一个发行版(通常是Ubuntu),但在离线环境下这会失败。
你可以提前在有网络的机器上,使用
wsl--export命令将一个已有的发行版导出为
.tar文件,作为离线部署的种子。
注意:所有下载的安装包,请确保其架构(x64/ARM64)与你的目标离线机器完全一致。
将上述文件统一放入一个文件夹,例如
Docker_Offline_Package,这就是你的“移动工具箱”。
1.2
目标系统预检:扫清安装路上的“地雷”
在将工具箱插入离线电脑之前,先通过远程或现场方式,对目标系统的状态进行一次快速检查。
这能避免很多徒劳的安装尝试。
- 操作系统版本:
2004(内部版本
19041)或更高版本,还是Windows
11。
低于此版本的系统无法运行WSL2,这是硬性前提。
- 现有虚拟化状态:
以管理员身份打开PowerShell,运行以下命令,检查关键功能是否已启用:
查看输出结果中的#-Online
Microsoft-Windows-Subsystem-Linux
State字段。Enabled表示已启用,Disabled表示未启用。记录下这些状态。
- 现有WSL版本:
如果系统已有WSL,检查其版本:
此命令会列出已安装的发行版及其对应的WSL版本(1或2)。wsl--list
--verbose
我们的目标是让所有发行版运行在WSL2下。
2.
分步执行:从系统配置到核心安装
准备工作就绪后,我们开始正式的离线部署流程。
这个过程需要一定的系统权限和对潜在问题的耐心。
2.1
启用必要的Windows功能
这是最容易出错的一步。
你需要以管理员身份运行PowerShell或CMD。
#启用“Windows子系统
/featurename:Microsoft-Windows-Subsystem-Linux
/all
/featurename:VirtualMachinePlatform
/all
/norestart
执行完这两个命令后,必须立即重启计算机。
即使系统提示“无需重启”,也强烈建议重启,以确保功能完全加载。
关于Hyper-V,这里需要做一个关键决策:
- 场景A:目标机器是纯粹的开发工作站,且你需要运行基于Hyper-V的虚拟机(如旧版Docker
Toolbox、某些Android模拟器)
。那么你需要启用它:
启用Hyper-V后同样需要重启。dism.exe/online
/featurename:Microsoft-Hyper-V-All
/all
/norestart
请注意,启用Hyper-V会导致一些基于VMware或VirtualBox的虚拟机无法启动,这是Windows底层虚拟化架构的限制。
- 场景B:目标机器仅用于运行Docker
Desktop,且追求最轻量、启动最快的体验
。Docker
Desktop使用WSL2后端时,可以不启用Hyper-V。
WSL2使用的是一个轻量化的“虚拟机平台”,与完整的Hyper-V角色可以共存,但Docker
Desktop在安装时如果检测到Hyper-V已禁用,会自动选择WSL2后端,这反而是更优的路径。
提示:对于大多数现代容器开发场景,我个人的建议是优先尝试不启用Hyper-V,让Docker
Desktop完全基于WSL2运行。
这通常能获得更好的资源利用率和更快的启动速度。
如果后续有特殊需求,再回头启用Hyper-V也不迟。
2.2离线安装WSL2
Linux内核
系统重启后,将你之前下载的wsl_update_x64.msi文件拷贝到离线电脑,直接双击运行安装。
这是一个静默的更新过程,安装完成后通常没有明显提示。
安装后,打开PowerShell(无需管理员权限),验证内核更新是否成功:
wsl--status
你应该能在输出信息中看到类似
“默认版本:2”
以及内核版本号的信息。
接下来,将WSL的默认版本设置为2:
这条命令做了三件事:创建了一个名为“Ubuntu-Offline”的发行版实例;将其文件系统存储在wsl命令是无效的。处理Linux发行版(离线方案)
在完全离线的环境中,
wsl--install
我们需要手动导入一个发行版。
- 将你之前从工作机导出的Linux发行版
.tar文件(例如ubuntu_offline.tar)拷贝到离线电脑的某个,并为其命名wsl
D:\wsl_images\ubuntu_offline.tar
--version
2
D:\wsl_distros\ubuntu目录;指定使用WSL2。wsl--set-default
Ubuntu-Offline
wslUbuntu-Offline
在WSL终端内,你可能需要运行sudopasswd
root
设置root密码,并用adduser创建一个普通用户。2.4安装Docker
Desktop
现在,终于可以运行主角了。
双击你拷贝过来的Docker
Desktop
Installer-4.xx.x.exe。
安装程序会检测系统环境。
如果前面的步骤都正确,它会顺利进入安装流程。
安装过程中,关键的选项是选择后端引擎:
- 如果系统已启用Hyper-V,安装程序通常会提供“使用Windows容器而不是Linux容器”的选项(对应Hyper-V后端)。
对于绝大多数开发场景,请勿勾选此项,我们要用的是Linux容器。
- 如果系统未启用Hyper-V,安装程序会自动选择WSL2作为后端,这是最理想的情况。
安装完成后,再次重启计算机(安装程序通常会提示)。
重启后,Docker
Desktop应该会自动启动。
你会在系统托盘看到鲸鱼图标。
3.
安装后配置与验证:确保一切就绪
安装成功只是第一步,我们需要验证Docker是否能在离线环境下正常工作。
- 首次启动与登录:启动后,Docker
Desktop可能会提示你登录账户。
在离线环境下,你可以点击“跳过”或使用已有的离线凭证(如果之前登录过并保存了状态)。
关键是进入主界面。
- 验证Docker引擎与WSL2集成:
- 打开PowerShell,运行:
确认版本信息正常输出。docker--version
--version
- 运行一个最简单的测试命令:
在完全离线的情况下,这个命令会失败,因为无法从Dockerdockerrun
hello-world
Hub拉取镜像。
但这恰恰是正常的!它证明Docker客户端命令可以正常执行。
失败信息应该是关于网络连接或镜像拉取失败,而不是“docker
daemon
running”之类的错误。
- 打开PowerShell,运行:
- 验证WSL2后端:在Docker
Desktop的设置中,进入“Resources”
->
Integration”。
你应该能看到你之前导入的“Ubuntu-Offline”发行版,并且其集成开关已被自动启用。
这表示Docker引擎正运行在该WSL2发行版内部。
4.
高级排错与离线镜像管理
即使按照上述步骤操作,你可能还是会遇到一些棘手的问题。
这里列举几个常见的“坑”及其解决方案。
4.1
常见错误与解决方案
style="text-align:left">错误现象 | style="text-align:left">可能原因 | style="text-align:left">解决方案 |
|---|---|---|
style="text-align:left">安装时提示“WSL installationstyle="text-align:left">WSL2内核未成功安装或更新。 | 重新运行 />2.--shutdown彻底关闭WSL,然后重启Docker Desktopstyle="text-align:left">WSL2发行版启动失败,或与Hyper-V有冲突。 | -v,确保状态为 如果不是,尝试 />2.尝试临时禁用Hyper-V(如果已启用): /setoff,重启后再试。 但长期方案是解决冲突。 |
style="text-align:left">运行 | style="text-align:left">Docker引擎服务未启动,或者客户端与守护进程的通信方式(命名管道 vs.Desktop应用本身已运行(托盘图标非灰色)。 />2.在PowerShell中,设置环境变量: "npipe:////./pipe/docker_engine", "User")或 | |
style="text-align:left">版本不匹配警告 | style="text-align:left">离线安装的Docker Desktop版本与WSL2内核版本,或与后续要加载的镜像存在兼容性问题。 | style="text-align:left">这是离线环境的最大挑战。 唯一可靠的方案是,在联网工作机上,确保Docker Desktop版本、WSL2内核版本以及所有基础业务镜像的版本,作为一个“已知良好的组合”被整体打包和测试,然后再迁移到离线环境。 |
4.2
Hub的情况下,你需要建立自己的离线镜像供应链。
- 导出与导入镜像:在联网机上,将所需的基础镜像(如
nginx:alpine,python:3.9-slim)拉取下来,然后导出为文件:
将生成的#docker
nginx:alpine
.tar文件拷贝到离线机,然后导入:#docker
nginx_alpine.tar
- 使用私有镜像仓库:对于企业级场景,搭建一个内网私有镜像仓库(如Harbor)是终极解决方案。
你只需在离线环境中将Docker客户端指向这个内网仓库地址,所有的拉取和推送操作就都在内网完成。
- 编写健壮的Dockerfile:在Dockerfile中,尽量使用绝对版本的镜像标签(如
python:3.9.18-slim-bookworm),避免使用latest。这能确保在离线环境中构建行为的一致性。
完成所有部署和测试后,我习惯在目标机器上创建一个简单的checklist.txt文档,记录下已安装的Docker
Desktop版本、WSL2内核版本、已导入的基础镜像列表以及关键的系统配置。
这份文档对于后续的维护、升级或故障转移至关重要。
离线部署就像一次精心策划的远征,充分的准备和详细的路线图是成功抵达目的地的唯一保障。


