ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

DockerToolbox完整教程:老Windows下用VirtualBox跑Docker并配置阿里云镜像加速

DockerToolbox完整教程:老Windows下用VirtualBox跑Docker并配置阿里云镜像加速 先聊几句背景。现在网上铺天盖地都是 WSL2 Docker Desktop 的教程以至于有些朋友拿到一台老一点、系统版本偏低或者公司安全策略比较严格的 Windows 10 电脑时反而不知道该怎么办了。那种情况恰恰是 DockerToolbox 的主场。DockerToolbox 是 Docker 官方早年为 Windows 7/8/10 老版本提供的工具集核心思路是用 VirtualBox 跑一个轻量级 Linux 虚拟机在虚拟机里运行 Docker daemonWindows 端只保留命令行和图形工具。这篇文章我要带你完整走一遍“下载 DockerToolbox - 安装 - 初始化默认虚拟机 - 配置阿里云镜像加速 - 验证加速生效”的流程会把每一步背后的原理、可能踩的坑、以及我这些年实际用下来的经验都写清楚。如果你手头的机器装不了 Docker Desktop、公司电脑没有开启 Hyper-V、或者你还在用 Windows 10 的 LTSC 老版本那么这篇文章就是给你准备的。只要你的机器还能跑 VirtualBoxDockerToolbox 就能让 Docker 在这台机器上服役而且配合阿里云镜像加速之后拉镜像的速度完全可以达到日常开发可用的标准。1. 安装前先把这几件可能踩坑的事搞清楚1.1 都这个年代了为什么还需要 DockerToolbox我知道你心里可能有个疑问DockerToolbox 不是早就停止更新了吗为什么还要折腾它确实DockerToolbox 最后一个稳定版还停留在 19.03.1Docker 官方现在主推的是 Docker Desktop。但现实情况是很多开发环境并不满足 Docker Desktop 的要求。Docker Desktop 在 Windows 上的运行前提是系统必须支持 Hyper-V 虚拟化或者支持 WSL 2 后端而 Windows 10 家庭版默认没有 Hyper-V一些老版本比如 1903 之前的版本也没有 WSL 2 的完整支持另外不少企业安全策略会把 Hyper-V 或虚拟机平台功能直接关掉。在 Docker Desktop 根本装不上的情况下DockerToolbox 几乎是唯一的出路。它的原理很简单不依赖 Windows 原生虚拟化而是通过 VirtualBox 去创建一个 Linux 虚拟机然后在这个虚拟机里跑 Docker daemon。只要你 CPU 支持虚拟化并且能在 BIOS 里打开 VT-x/AMD-V它就能工作。我甚至见过有人在 2012 年的老笔记本上把 DockerToolbox 跑得稳稳当当那个年代根本没有 WSL 2 这回事。1.2 安装前的环境自检清单虽然 DockerToolbox 的门槛很低但也不是随便一台机器都能顺利装好。我建议动手之前先过一遍下面这个自检清单能省掉后面一多半的麻烦。操作系统Windows 7 及以上64 位系统Windows 10 的各个版本包括企业版 LTSC 2021 都没问题。CPU 虚拟化必须在 BIOS/UEFI 中开启 VT-xIntel或 AMD-VAMD。这一步很多人会漏掉导致后面 VirtualBox 创建的虚拟机起不来。内存机器总内存建议不低于 4GB。默认虚拟机会分配 2GB 内存你要是只有 2GB 内存的机器跑起来会非常吃力。磁盘空间C 盘至少留出 5GB 以上空间。安装包本身约 120MB但后续要下载 boot2docker.iso 镜像、创建虚拟磁盘、拉取容器镜像空间会持续消耗。杀毒软件Windows Defender 或其他第三方杀软可能拦截 VirtualBox 的驱动安装建议安装前先把目录加入白名单或者临时关闭实时防护。网络环境安装过程中需要下载 boot2docker.iso后面拉镜像也需要网络建议网络稳定的环境下操作。1.3 提前准备的账号与素材配置阿里云镜像加速需要一个阿里云账号或者至少能用支付宝快捷登录的账号。这个账号是免费的开通容器镜像服务也不需要付费放心注册就行。你还可以提前做一件事在浏览器里访问 Docker Toolbox 的 GitHub Releases 页面找到 DockerToolbox-19.03.1.exe 的下载链接先用浏览器或下载工具把安装包拉下来。提前下载的原因有两个一是安装包体积不小网速不好的时候用浏览器直下可能会中断二是后面安装过程中它默认要去 GitHub 下载 boot2docker.iso那个文件下载失败的概率更高我们等会专门处理这个问题。提示如果你的网络访问 GitHub 不稳定安装包也可以从国内一些知名的软件站或镜像站点下载下载后建议核对一下文件大小官方安装包大约是 120MB 左右如果只有几十 MB很可能是不完整的文件。2. 下载与安装全流程从安装包到 Docker 跑起来2.1 安装过程中的几个关键选项拿到安装包之后双击运行。安装程序会让你选择组件默认是全部勾选我建议保持默认但有几个细节我想单独说一下。组件里包含 Docker Toolbox for Windows、Docker Compose for Windows 和 Kitematic for Windows。Docker Compose 就是现在大家常说的 compose当时还是独立组件建议保留。Kitematic 是官方提供的图形化管理界面说实话它已经很久不更新了功能也比较初级你如果不喜欢用它可以取消勾选不会影响命令行使用。安装程序还会检查系统里有没有 Git因为 Docker Quickstart Terminal 是基于 Git Bash 的如果没有 Git 它会自动安装一个 Git for Windows。这个也不要取消后面你要在 Windows 命令行里正常使用 docker 命令靠的就是这个环境。安装路径方面默认会装到 C:\Program Files\Docker Toolbox。我个人建议保持默认英文路径不要改成包含中文的目录否则后面 Git Bash 或者 VirtualBox 在解析路径时可能会出现奇怪的问题。2.2 首次启动与 boot2docker.iso 下载安装完成后桌面会多出三个图标Docker Quickstart Terminal、Kitematic、Oracle VM VirtualBox。我们先双击 Docker Quickstart Terminal。这个快捷方式其实是一个 Git Bash 脚本它会依次做几件事检查 docker-machine 是否存在 - 检查默认虚拟机 default 是否存在 - 如果不存在就创建一个 - 创建完成之后配置环境变量 - 进入 Linux 风格的 Shell 环境。第一次启动时它发现本地没有 boot2docker.iso就会自动去 GitHub 下载这个文件默认保存路径是 C:\Users\你的用户名.docker\machine\cache\。这里就是第一个高概率翻车的点boot2docker.iso 差不多有 400 多 MB从 GitHub 直接下载经常失败或者速度极慢。就算网速正常那个下载进度条也可能卡在某个百分比一动不动。解决方案也很直接不要等它自动下载先把 Docker Quickstart Terminal 关掉手动下载 boot2docker.iso 文件然后放进 cache 目录。boot2docker.iso 的下载源除了 GitHub Releases很多高校开源镜像站也有同步。你只需要确认版本和 DockerToolbox 匹配19.03.1 对应的 boot2docker 版本也是 19.03.1 左右。文件下载好之后放在 C:\Users\你的用户名.docker\machine\cache 目录下重新打开 Docker Quickstart Terminal脚本会识别到本地的 boot2docker.iso跳过下载这一步。2.3 初始化 default 虚拟机的时候脚本在做什么继续往下走。boot2docker.iso 就位后脚本会执行 docker-machine create 命令默认参数大致是docker-machine create -d virtualbox default这个过程会在 VirtualBox 里创建一个名叫 default 的虚拟机给它分配 2GB 内存实际是 1GB 或 2GB取决于 DockerToolbox 默认配置和一个 20GB 左右的动态虚拟磁盘然后启动虚拟机等待 SSH 端口可用最后把 Docker daemon 的远程访问信息保存下来。日志里经常会出现一行提示Running pre-create checks... 和 Creating machine... 如果一切顺利最后一行会显示类似这样的内容Docker is up and running! To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: C:\Program Files\Docker Toolbox\docker.exe-machine env default同时窗口中还会显示一个 IP 地址通常是 192.168.99.100。这个 IP 记住一下后面配置端口映射、访问容器服务时都会用到。2.4 验证 Docker 环境是否可用创建完成之后Quickstart Terminal 会自动导出环境变量所以这个窗口里的 docker 命令是可以直接用的。先跑两个最基本的命令验证一下docker-machine ls这个命令会列出所有虚拟机你应该能看到 default 这个机器状态是 RunningDocker 版本是 19.03.1。如果这里显示的是 Stopped或者 Error说明虚拟机没有正常起来先不要继续回头去看第 4 节的问题排查。接着验证客户端和 daemon 的连通性docker version重点看 Server 部分是否能正常输出 API 版本、Go 版本、OS/Arch 这些信息。如果 Server 部分报错说明客户端和虚拟机里的 daemon 没连上。然后可以拉一个最小的镜像测试docker run hello-world第一次运行这个命令会先从 Docker Hub 拉取 hello-world 镜像正常情况下很快就能看到 “Hello from Docker!” 的输出。如果你发现这个步骤特别慢或者直接超时——别急着怀疑网络这其实正好说明镜像加速必须配置我们下一节就处理这个问题。注意如果你是在 CMD 或 PowerShell 里直接输入 docker ps大概率会报错提示 “error during connect”。原因很简单DockerToolbox 的 docker daemon 不在 Windows 本地而在 VirtualBox 虚拟机里CMD 没有继承 DOCKER_HOST 这些环境变量。要么你始终用 Docker Quickstart Terminal要么手动执行 docker-machine env default 导出环境变量。3. 阿里云镜像加速配置把拉镜像速度拉满3.1 镜像加速到底加速了什么先说清楚原理不然你不知道自己在配置什么。Docker 默认从 Docker Hub 拉取镜像而 Docker Hub 的服务器在海外国内网络直接从 Docker Hub 拉镜像速度经常只有几十 KB/s甚至直接超时。镜像加速器Registry Mirror就是一个前置代理。你推送一个镜像地址给 Docker daemon 后daemon 发现这是一个官方镜像就会先到配置好的镜像源去拉取。DockerToolbox 支持在 daemon 启动参数里指定 registry-mirrors镜像源拿到请求后会返回对应镜像层的数据。因为镜像源在国内有 CDN 节点数据走国内线路速度自然就上去了。阿里云容器镜像服务给每个用户分配了一个专属的加速器地址格式是 https://一串随机ID.mirror.aliyuncs.com。这个地址是每个阿里云账号独立分配的不需要额外付费用你自己的账号登录控制台就能看到。3.2 获取阿里云专属加速地址操作步骤并不复杂打开浏览器访问阿里云官网并登录。进入“容器镜像服务 ACR”控制台注意是容器镜像服务不是对象存储 OSS。左侧菜单里找到“镜像加速器”进入该页面。页面会显示一个专属加速地址类似 https://abcdefg.mirror.aliyuncs.com把这个地址复制下来。有些新版的阿里云控制台界面可能改过版如果你找不到“镜像加速器”入口可以直接访问容器镜像服务控制台后在首页或镜像中心相关菜单里找。整个页面里通常还会给出 Docker 官方推荐的各种配置方法其中就包括 DockerToolbox 的配置说明你可以对照着看。注意千万不要把加速地址和“个人版实例”的登录地址 registry.cn-hangzhou.aliyuncs.com 搞混了。后者是普通的镜像仓库地址不是加速器。加速器地址一定会带 .mirror.aliyuncs.com 这个域名。3.3 配置方法一创建虚拟机时指定加速地址如果 default 虚拟机还没创建或者你愿意删掉重建那么最干净的方式是在 docker-machine create 的时候直接传入 --engine-registry-mirror 参数docker-machine rm -f default docker-machine create -d virtualbox \ --engine-registry-mirror https://你的专属ID.mirror.aliyuncs.com \ default第一行命令把原来的 default 机器删掉注意这会同时删除该虚拟机上的所有容器镜像和数据卷所以如果你之前已经在里面存了东西请先备份。第二行命令创建新机器并把这个参数写进虚拟机里 Docker daemon 的启动配置。这样创建出来的机器从第一天开始就是带加速的。删除重建的思路比较适合“刚装好还没怎么用”的场景如果你已经用 DockerToolbox 跑了不少容器或者不想重新下载 boot2docker.iso那就用第二种方法。3.4 配置方法二修改已有虚拟机的 daemon 配置不删机器也能配置。步骤是这样先打开 Docker Quickstart Terminal进入 Bash 环境然后用 ssh 命令登录到虚拟机docker-machine ssh default登录之后你会进入 boot2docker 这个精简版 Linux 系统。boot2docker 虽然是精简系统但文件系统是可读写的我们可以直接修改 Docker daemon 的配置文件sudo vi /etc/docker/daemon.json这个文件如果不存在就创建一个。写入以下内容{ registry-mirrors: [https://你的专属ID.mirror.aliyuncs.com] }保存退出后重启 Docker daemon。这里有两种方式一种是只重启 daemonsudo /etc/init.d/docker restart另一种是退出虚拟机后直接重启整个 default 机器效果更彻底exit docker-machine restart default我个人更推荐 docker-machine restart因为重启虚拟机后 SSH、网络、环境变量都会重新理一遍排查问题的时候更干净。重启完成后别忘了重新打开 Docker Quickstart Terminal或者手动执行 docker-machine env default 让环境变量生效。这里顺便解释一下为什么改的是 /etc/docker/daemon.json。Docker 从 18.x 版本开始daemon 的配置统一从这个 JSON 文件读取包括镜像加速、日志驱动、存储驱动等都可以写在这里面。DockerToolbox 自带的 boot2docker 虽然是精简发行版但同样遵守 Docker 的标准配置文件规范所以这个方式在 DockerToolbox 19.x 上是稳定有效的。3.5 验证加速是否生效配置完之后别急着拉镜像先看 docker info 输出docker info | grep -A 2 Registry Mirrors如果配置成功你会看到类似下面的输出Registry Mirrors: https://你的专属ID.mirror.aliyuncs.com/只要这里显示了你的加速地址就说明 daemon 已经成功加载了镜像加速配置。然后实际拉一个镜像测试速度。比如拉一个常用的 Alpine Linux 最小镜像docker pull alpine:3.19加速配置生效的情况下这个镜像通常几秒到十几秒就能拉完。如果没有加速你可能要等很久甚至直接超时。再拉一个稍微大一点的镜像试试比如 nginxdocker pull nginx:alpine观察拉取百分比推进的速度如果一直是刷刷刷地往下跑说明加速已经生效了。4. 常见问题与排查技巧实录4.1 安装包双击没反应或者 VirtualBox 驱动被拦截这种情况在 Windows 10 上并不少见。如果是双击安装包没反应先右键选择“以管理员身份运行”。SmartScreen 如果弹出蓝色警告点“仍要运行”即可。如果还是没反应大概率是杀毒软件拦截了安装程序把安装包加入白名单或者临时关闭杀毒软件后重试。比较隐蔽的问题是 VirtualBox 安装完成后创建虚拟机时提示 “VBoxManage not found” 或者 “Driver error”。这通常意味着 VirtualBox 的驱动没有成功安装或者 PATH 环境变量里没有包含 VirtualBox 的安装目录。检查一下 C:\Program Files\Oracle\VirtualBox 下是否有 VBoxManage.exe如果没有重装 VirtualBox如果有手动把这个目录追加到系统 PATH 里。另外Windows 10 的“内存完整性”功能内核隔离也会拦 VirtualBox 的驱动如果反复安装失败可以在 Windows 安全中心 - 设备安全性 - 内核隔离中关闭“内存完整性”然后重启再装。4.2 首次启动卡在 Waiting for SSH to be availableDocker Quickstart Terminal 在创建虚拟机的过程中如果日志长时间停留在 “Waiting for SSH to be available...”通常是两种原因。第一种是 VirtualBox 虚拟机创建后网络配置有问题。打开 Oracle VM VirtualBox 主界面看到 default 虚拟机右键 - 设置 - 网络。DockerToolbox 默认会创建两块网卡一块是 NAT一块是 Host-Only。检查 Host-Only 网卡是否勾选且连接方式是“仅主机网络”。如果你看到网络适配器是空的或者电缆连接被勾掉了把配置改回来然后右键虚拟机 - 启动看看能不能正常开机。第二种原因是电脑上同时开启了 Hyper-V 或 Windows 沙盒。Hyper-V 和 VirtualBox 会争抢 CPU 的虚拟化指令集导致 VirtualBox 里的虚拟机起不来。如果你的系统开启了这些功能而你又必须用 DockerToolbox就需要临时关闭 Hyper-V。以管理员身份打开 CMD执行bcdedit /set hypervisorlaunchtype off然后重启电脑。用完想恢复时把 off 改成 auto 再重启即可。4.3 boot2docker.iso 下载太慢或失败这个问题我在第 2 节提过这里再强调一下坑点。很多新手在 Quickstart Terminal 里看到 Downloading boot2docker.iso 的进度条就傻等着结果等了半小时还是 0%。正确做法是关掉窗口手动下载对应版本的 boot2docker.iso放到 C:\Users\你的用户名.docker\machine\cache 目录下。下载源方面优先选择国内同步的开源镜像站。如果你的网络连 GitHub 都打不开也可以用浏览器挂一个代理或者让朋友下载后传给你。这个文件只需要下载一次后续就算删掉 default 机器只要 cache 目录里的 iso 还在重建的时候就不用重新下载。4.4 docker-machine ls 显示状态 Error 怎么办这种情况一般是 VirtualBox 服务和当前会话不同步导致的。最常见的场景是虚拟机本来在运行但 Windows 重启后VirtualBox 服务没有自动启动docket-machine 检测不到虚拟机的运行状态。解决方法很简单先手动打开 VirtualBox确认 default 机器是否还能正常运行。如果 VirtualBox 里能看到它在运行再回到命令行执行docker-machine ls如果状态恢复正常说明只是检测延迟。如果 VirtualBox 里显示机器处于已保存状态点“启动”把它拉起来再执行 docker-machine ls。如果机器出现红字异常错误那就只能 docker-machine rm -f default 删掉重建。4.5 CMD 或 PowerShell 无法连接 Docker daemon这个问题我在前面已经预告过。DockerToolbox 的 daemon 在虚拟机里你的 CMD 就必须知道 DOCKER_HOST、DOCKER_TLS_VERIFY、DOCKER_CERT_PATH 这三个环境变量的值。不跑 Quickstart Terminal 的情况下你可以手动设置docker-machine env default在 CMD 里直接把输出结果一行行复制执行。在 PowerShell 里则要把命令改成 C:\Program Files\Docker Toolbox\docker-machine.exe env default | Invoke-Expression但说实话这样倒腾来倒腾去最省心的方式还是老老实实用桌面上的 Docker Quickstart Terminal。它启动后会自动帮你把所有环境变量配好你只需要在那个窗口里输入 docker 命令就行。4.6 配置镜像加速之后不生效的几个原因这个是最容易让人头大的问题。明明按步骤改好了 daemon.jsondocker info 里却没有出现 Registry Mirrors或者拉镜像依然很慢。我总结一下大概率的原因daemon.json 路径写错了。DockerToolbox 19.x 的配置文件在 /etc/docker/daemon.json不是 /var/lib/boot2docker/profile。虽然老版本 boot2docker 也支持在 profile 里写 EXTRA_ARGS但新版更推荐 daemon.json。确保你改的是正确的文件。JSON 语法错误。比如少了逗号、多了花括号、加速地址没有加双引号。用 Python 的 json.tool 验证一下语法会更稳妥。没有重启 daemon。修改 daemon.json 之后必须重启 Docker daemon 或整个虚拟机光退出去再登录是不行的。加速地址复制错了。检查一下 URL 里是否带上了 https:// 前缀以及 .mirror.aliyuncs.com 这个域名是否完整。有人会把阿里云镜像仓库地址里的长串 registry 域名当成加速地址自然不生效。4.7 一个隐藏坑DockerToolbox 里的文件挂载路径最后分享一个容易踩的开发细节。在 Docker Desktop 里你把 Windows 的 D:\code 挂载到容器路径通常写成 -v /mnt/d/code:/app。但是在 DockerToolbox 里虚拟机看到的 Windows 文件系统路径是不同的。DockerToolbox 的 VirtualBox 共享文件夹机制会把 Windows 的 C:\Users 挂到虚拟机的 /c/Users 下D 盘则不一定挂载。所以如果你要挂载代码目录建议直接把项目放在 C:\Users\你的用户名 下然后挂载路径写-v /c/Users/你的用户名/project:/app这个细节网上教程很少提但真到用的时候会卡住不少人。我自己用 DockerToolbox 的时间不算短虽然现在新机器上早就换成了 Docker Desktop WSL 2但遇到老电脑、公司定制的精简系统、或者那些必须关闭 Hyper-V 的环境时我还是会第一时间装回 DockerToolbox。它不花哨也不更新了但足够稳定配合阿里云镜像加速之后日常开发和轻量部署完全够用。最后再分享一个小技巧如果你在配置过程中把虚拟机折腾坏了不用着急。记住这几条铁律——boot2docker.iso 放在 cache 目录就不会重复下载default 机器删了可以重建daemon.json 改坏了就删掉重来。DockerToolbox 这套机制最巧妙的地方在于整个虚拟机就是由 Docker Machine 管理的一次性状态出问题后“删掉重建”往往比“慢慢排查”更高效。建议你多试几次熟悉之后你会发现它其实比想象中抗造得多。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进