先别急着下 Docker Desktop。如果你手里这台 Windows 10 是家庭版,或者出于稳定考虑用的是 LTSC 这种非主流版本,双击 Docker Desktop 安装包之后大概率看到的只有一个“未满足系统要求”的报错。这种时候,DockerToolbox 才是真正能让你在 Windows 10 上跑起 Docker 的最快路径。它基于 VirtualBox 创建一台小型 Linux 虚拟机,所有容器都在虚拟机里跑,虽然 Hype-V 比不了,但对学习、本地开发、测试部署来说完全够用。
这篇文章我打算把整条路线一次性讲透:从哪里下载、怎么安装、为什么必须配置阿里云镜像加速、加速器地址怎么获取,以及装完后怎么把环境折腾顺。内容比较长,建议你边看边动手操作,遇到问题直接翻到第五部分查坑。
1. 先搞清楚:为什么你的 Windows 10 需要 DockerToolbox
1.1 DockerToolbox 到底解决什么问题
Docker 的官方正统做法是 Docker Desktop,它在 Windows 10 上依赖 Windows 自带的 Hyper-V(或 WSL 2)虚拟化平台来运行 Linux 容器。问题在于,Hyper-V 是专业版、企业版、教育版的专属能力,Windows 10 家庭版直接被砍掉了这个组件。你的电脑即便性能再强,只要版本不对,Docker Desktop 装到一半就会卡在系统检查那一步,连安装界面都进不去。
DockerToolbox 则是 Docker 官方早期为老系统和家庭版用户提供的替代方案。它的思路很简单:不依赖 Hyper-V,而是用 Oracle 的 VirtualBox 创建一台完整的 Linux 虚拟机,Docker 引擎就装在这台虚拟机里。你本地执行的docker、docker-compose命令会通过网络连接进虚拟机里的 Docker daemon,从外部看和原生体验几乎没有区别。
一句话说清区别:Docker Desktop 是 Windows 原生跑的容器,DockerToolbox 是虚拟机里跑的容器。前者快、干净,后者麻烦一点,但胜在兼容性足够宽。
1.2 什么样的机器适合用 DockerToolbox
从我这几年接触各类机器的情况看,遇到下面这几种场景时 DockerToolbox 反而是最合适的选择:
- 机器是 Windows 10 家庭版,没有 Hyper-V,Docker Desktop 装不了。
- 公司或单位下发的是 Windows 10 企业版 LTSC 2021 这类精简版系统,系统组件被裁剪过,Hyper-V 虽然能开,但兼容性时好时坏,Docker Desktop 偶尔会崩。
- 电脑比较老,BIOS 里可能没有虚拟化选项,或者虚拟化被安全软件锁死,而 VirtualBox 对虚拟化环境的要求比 Hyper-V 宽松得多。
- 你只是临时想学一下 Docker、跑几个镜像,不想在系统里引入 WSL 和大量虚拟机平台组件。
另外,DockerToolbox 自带一个 Quickstart Terminal,打开后会自动帮你创建并启动虚拟机,对小白非常友好。你不需要提前会 VirtualBox 的任何操作,它会全部替你搞定。这一点对新手来说能省不少事。
2. 下载与安装:几个容易翻车的环节
2.1 去哪里下载,怎么避免下到旧版本
DockerToolbox 的官方下载入口在 GitHub 的 docker/toolbox 仓库 releases 页面,文件名一般是DockerToolbox-xx.x.x.exe这种格式。国内访问 GitHub 不一定总是顺畅,如果一直转圈,可以直接用镜像站点的 releases 下载加速,也可以选择国内一些软件站提供的托管包,但要注意核对文件签名和时间,坚决不下载来历不明的修改版。
下载时有个坑需要特别留意:DockerToolbox 整个项目早已停止大版本维护,最后一次比较通用的版本号集中在 19.03 附近。如果你搜到一个看起来版本号特别新的安装包,多半是第三方二次打包的,不推荐使用。官方原版虽然版本老,但配合 boot2docker 机制跑稳定版镜像完全没问题。
下载完成后先校验一下文件大小,官方安装包通常在 300MB 以上,因为里面自带了一个 VirtualBox 安装程序。太小的文件肯定有问题,这一点要先做好心理准备。
2.2 安装过程与 VirtualBox 版本选择
安装过程本身没什么特殊技巧,默认下一步即可,但有两个点需要手动干预,这里单独说明。
第一,组件选择界面一定要保持默认全选。DockerToolbox 安装程序会包含三个核心组件:Docker CLI、Docker Machine、Docker Compose,外加 VirtualBox。如果你只选了 Docker 组件而漏掉 VirtualBox,后面的虚拟机会因为找不到底层虚拟化而完全无法创建。这三个组件以后都会用到,别为了省一点磁盘空间做减法。
第二,安装过程中 VirtualBox 可能会弹出一个“警告:网络接口”的提示。这是在告诉你它要安装一个 Host-Only Network 虚拟网卡,选择“是”允许即可。如果你在这里手滑点了否,后面 Docker Machine 创建出来的虚拟机虽然存在,但没有任何宿主网络连接,docker run时端口映射全部失效,很难排查。这是我的真实经历,后来不得不重装了一遍整个工具箱才解决。
安装路径不建议修改,默认会装到C:\Program Files\Docker Toolbox下。这个目录里的docker.exe、docker-machine.exe、docker-compose.exe三个可执行文件,后续手动配置 PATH 时会用到。
2.3 安装完成后两个必须确认的环境点
安装完不要急着关电脑,先打开一个新的 cmd 窗口,执行下面三个命令确认 CLi 是否已经就位:
docker --version docker-machine --version docker-compose --version正常输出对应版本号就说明安装成功。如果提示“命令不存在”,说明安装路径没有自动写入 PATH。需要手动把C:\Program Files\Docker Toolbox加到系统环境变量的 Path 中,然后重新打开终端窗口再试一次。
另一个需要确认的点是 VirtualBox 是否随安装程序正确部署。执行VBoxManage --version,能够输出版本号才说明 VirtualBox 安装完整。这里我特别强调一个教训:如果你安装的时候电脑上已经存在一个较新版的 VirtualBox,DockerToolbox 可能会选择不覆盖它。但新版 VirtualBox 与 Docker Machine 自带的驱动之间偶尔会出现兼容性裂缝,表现就是创建虚拟机时卡死或报 VBoxManage 相关错误。遇到这种情况,稳妥的解决办法是先把旧 VirtualBox 彻底卸载干净,再重新安装 DockerToolbox 自带的版本。
3. 阿里云镜像加速:没有它你基本拉不动镜像
3.1 为什么国内拉 Docker Hub 这么慢
Docker 镜像的默认仓库是 Docker Hub,服务器在境外。国内网络环境直接执行docker pull时,不仅速度慢,还经常在下载中途超时中断,一个一两百 MB 的基础镜像能折腾半个多小时。第一次遇到这种问题的人很容易怀疑是自己的 Docker 装坏了,其实不是,纯粹就是网络链路问题。
解决办法是配置 registry mirror,也就是镜像加速器。它的原理很好理解:你把拉取请求发给国内的镜像服务器,服务器先去 Docker Hub 拉取镜像并做本地缓存,再把数据传给你。下次再拉同一个镜像时,直接从缓存中取,速度和稳定性都有质的提升。
国内各大云厂商都提供免费的个人镜像加速服务,用得最多的是阿里云。阿里云加速器的地址是专属的,每个人都不一样,格式类似https://<你的ID>.mirror.aliyuncs.com,好处是拥有独立的缓存空间,不会出现公共加速节点人多拥堵的情况。
3.2 获取专属加速器地址的完整步骤
获取加速器地址不需要购买服务器,也不需要付费,只需要一个阿里云账户。具体操作流程如下:
- 浏览器打开阿里云官网,用支付宝或手机号注册一个账号,登录控制台。
- 在页面顶部搜索框输入关键词“容器镜像服务”,进入容器镜像服务(ACR)控制台。
- 进入后左侧菜单找到“镜像加速器”,点击进去就能看到一个专属加速器地址。
- 当时如果控制台改版找不到入口,可以直接在搜索框输入“镜像加速器”,系统会直接跳转。
页面里通常会附带一段配置文档,是给不同系统用的操作说明,你可以先忽略它,因为那是针对 Docker Desktop 用户的。下面我会单独讲 DockerToolbox 的配置方法和它不一样。
加速器地址是一串带个人标识的 URL,最好先复制到记事本里存好。因为后面创建虚拟机和修改配置文件都要用到,来回切页面容易复制错。
3.3 两种配置方式对比
在 DockerToolbox 环境下配置镜像加速,和 Docker Desktop 里改 daemon.json 不是一回事。DockerToolbox 的 Docker daemon 不在 Windows 本机,而是跑在 VirtualBox 虚拟机里,所以所有加速配置必须作用到那台 Linux 虚拟机上。
配置加速器有两种思路:第一种是在创建虚拟机时就通过参数写死;第二种是虚拟机已经创建好了,通过 SSH 进去修改/etc/docker/daemon.json后再重启。下面详细说明。
第一种,创建虚拟机时直接指定:
docker-machine create \ --driver virtualbox \ --virtualbox-memory 2048 \ --virtualbox-cpu-count 2 \ --engine-registry-mirror https://<你的ID>.mirror.aliyuncs.com \ default第二种,虚拟机已存在时修配置:
docker-machine ssh default "echo '{\"registry-mirrors\":[\"https://<你的ID>.mirror.aliyuncs.com\"]}' | sudo tee /etc/docker/daemon.json" docker-machine restart default第二种方式我实际用得更频繁,因为很多人安装时已经通过 Quickstart Terminal 自动建好了虚拟机,没必要删掉重建。需要提醒的是,重启之后虚拟机的 IP 地址有可能发生变化,所以重启完要重新执行一次环境变量连接命令。
这里有一个细节要重点说明:docker-machine create创建虚拟机时会自动下载一个 boot2docker.iso 系统镜像。国内网络下载这个文件同样很慢,建议先用迅雷或其他下载工具手动把对应版本的 boot2docker.iso 下下来,放到C:\Users\你的用户名\.docker\machine\cache\目录下。Docker Machine 检测到缓存里有 iso 文件,就会直接使用本地文件,不再走网络下载。
4. 实操:创建 Docker Machine 并跑通第一个容器
4.1 创建 default 虚拟机并检查状态
不管你是通过 Quickstart Terminal 自动创建的,还是手动执行docker-machine create创建的,最终都会得到一台名为 default 的 Linux 虚拟机。创建过程需要几分钟,期间命令窗口会滚动大量日志,不用紧张,看到 “Docker is up and running!” 字样就说明大功告成。
创建完成后执行:
docker-machine ls输出结果中会有一行记录,STATE列为Running,URL列显示tcp://192.168.99.100:2376。这个 192.168.99.100 就是虚拟机的固定 IP。DockerToolbox 默认给虚拟机分配的就是 192.168.99.100,除非你手动调整过 DHCP 范围,否则一般不会变。
这里有一个新手最容易忽略的点:以后你要访问容器里的服务,不能直接用localhost,而是要用这个虚拟机的 IP。比如容器启动时做了端口映射8080:80,访问入口是http://192.168.99.100:8080,而不是http://localhost:8080。理解了这一层,后面很多坑都能避开。
4.2 让当前终端连上 Docker 环境
虚拟机创建好了,但直接执行docker ps大概率会报错,错误信息通常是 “Cannot connect to the Docker daemon”。原因是你本机的 docker 客户端还不知道要往哪台机器发送命令。DockerToolbox 的 Quickstart Terminal 之所以能用,是因为它在背后自动帮你设置好了环境变量。
要在普通 cmd 窗口实现同样的效果,执行:
@FOR /f "tokens=*" %i IN ('docker-machine env default') DO @%i如果你用的是 Git Bash 或 PowerShell,则执行:
eval $(docker-machine env default)执行后再运行docker ps,如果能看到一个空的容器列表而不是报错,说明客户端已经成功连接到了虚拟机里的 Docker daemon。这里提醒一句:这个连接状态只在当前终端窗口有效,新开窗口需要重新执行一次。为了省事,可以把对应命令写成一个 bat 脚本,双击即用。
4.3 拉取镜像并运行 nginx 容器
环境联通后,马上测试一下镜像加速是否生效。执行:
docker info输出内容中找到Registry Mirrors这一栏,下面列出的地址如果是你在阿里云控制台复制的那个专属地址,说明加速器配置已经真正生效。
接下来跑一个实际的容器验证全链路。拉取 nginx 镜像并启动:
docker run -d -p 8080:80 --name web nginx-d表示后台运行,-p 8080:80表示把虚拟机的 8080 端口映射到容器内部的 80 端口。首次执行时会自动拉取 nginx 镜像,配置了加速器的情况下,几十秒之内应该能完成。如果几分钟还卡在下载阶段,请回去检查 3.3 节的配置步骤。
容器启动成功后,浏览器打开http://192.168.99.100:8080,看到 nginx 的欢迎页,就说明整个 DockerToolbox 环境已经通了。再从虚拟机上体验一下容器操作:
docker ps docker exec -it web bash进入容器后执行ls /usr/share/nginx/html,能看到里面的静态站点文件,一切正常。到这里,你已经成功地在 Windows 10 上用 DockerToolbox 跑起了属于自己的第一个容器。
5. 常见的坑与排查技巧
5.1 问题速查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 安装完提示 docker 不是内部或外部命令 | DockerToolbox 路径未加入 PATH | 手动把C:\Program Files\Docker Toolbox加入系统环境变量 Path,重开终端 |
| docker-machine create 卡住不动 | boot2docker.iso 下载慢或失败 | 手动下载 iso 文件放到~/.docker/machine/cache/boot2docker.iso,重新创建 |
| docker ps 报 Cannot connect to the Docker daemon | 当前终端未设置 DOCKER_HOST 环境变量 | 执行 4.2 节的环境变量配置命令 |
| 容器启动成功但无法通过浏览器访问 | 使用了 localhost 而非虚拟机 IP | 改用http://192.168.99.100:8080访问 |
| docker pull 镜像超时 | 镜像加速器未配置 | 按 3.3 节配置 daemon.json 并重启虚拟机 |
| docker info 里 Registry Mirrors 为空 | daemon.json 没写对或未重启 | 检查 /etc/docker/daemon.json 是否有语法错误,重启 docker-machine |
| VirtualBox 升级后虚拟机无法启动 | Docker Machine 驱动与新版 VirtualBox 冲突 | 回退安装 DockerToolbox 自带的 VirtualBox 版本 |
| Hyper-V 开启后 VirtualBox 冲突 | Hyper-V 独占虚拟化模块 | 二选一,使用 DockerToolbox 时关闭 Hyper-V |
| 文件挂载后容器内看到的是空目录 | Windows 路径格式不对 | 使用/c/Users/xxx/project这种 VirtualBox 共享目录格式,别用C:\xxx |
5.2 几个亲测有效的排障心得
配置文件修改错误是最多见的。boot2docker 这个 Linux 虚拟机环境非常精简,自带工具少得可怜,编辑daemon.json时很多人习惯用vi,结果发现命令不存在。用我 3.3 节给的 echo 命令配合 tee 写文件反而风险更小,因为它不需要进入交互式编辑环境,直接以覆盖方式把内容写进去。写完后先执行docker info验证,不要急着重启,因为重启一次虚拟机要等一两分钟,浪费的时间完全没有必要。
还有一次我在 Windows 10 上遇到 192.168.99.100 这个地址始终 ping 不通,折腾了很久才发现是 Windows 防火墙把 VirtualBox Host-Only Network 的入站连接给拦了。解决方法是到防火墙高级设置里找 VirtualBox 相关的规则,把专用网络的入站连接改为允许。如果你也遇到同样的网络不通问题,可以按这个思路排查。
文件挂载的性能问题同样值得说道说道。DockerToolbox 的-v挂载本质上依赖 VirtualBox 的共享文件夹机制,它的性能和对符号链接的支持都比较一般。实际使用中,我建议把项目代码全部放在C:\Users\你的用户名\目录下面,挂载时统一用/c/Users/你的用户名/项目名的路径格式。跨盘符挂载不是不能用,但踩坑概率大增。
5.3 再说说 Windows 10 的系统版本问题
经常有人问 Windows 10 22H2 能不能装 DockerToolbox,答案是不仅能装,而且运行起来和在旧版本上没有明显差别。DockerToolbox 的组件都跑在 VirtualBox 虚拟机内部,和 Windows 版本没有直接依赖关系。真正容易出问题的是 Windows 10 的某些精简版,比如 LTSC 2021,因为裁剪掉了部分图形界面和虚拟化组件,安装 VirtualBox 时会遇到驱动兼容问题。
如果你手里的系统是企业批量部署的,管理员通常用组策略锁死了一些服务,也可能导致 VirtualBox 的虚拟网卡驱动安装不成功。遇到这种环境,建议优先检查系统服务列表里 VirtualBox 相关的服务是否处于停止状态,手动启动再试。如果仍然失败,个人建议直接换一台系统正常一点的电脑,不要在兼容性问题上耗费太多时间。
我个人的经验是,DockerToolbox 虽然被 Docker 官方标记为旧方案,但在 Windows 10 家庭版阵线上它依然是无可替代的存在。至少我在没有 Hyper-V 的机器上用它跑过 MySQL、Redis、Nginx 组成的本地开发环境,稳定性出乎意料。每次部署完顺手把三件事做完——配好阿里云镜像加速、把虚拟机内存调到 2GB 以上、把所有项目统一放到用户目录下——这之后的整个体验相当流畅,基本不会再被各种网络和路径问题打扰。