Windows 上 Docker Desktop 部署 MySQL + TDengine 全过程(含 WSL 报错与镜像加速排障实战)
写在前面 :本文记录了在 Windows 上使用 Docker Desktop 搭建 IoT 平台数据库环境(MySQL + TDengine)的完整过程。从 Docker Compose 安装、服务编排,到中途遭遇 WSL 版本过旧、
0x80072f7d安全频道报错、Docker Hub 拉取超时等一系列问题,逐一排查并最终解决。适合在 Windows 环境下使用 Docker 部署本地开发环境的同学参考。
目录
- [一、安装 Docker Compose](#一、安装 Docker Compose)
- [二、用 docker-compose 部署 MySQL 与 TDengine](#二、用 docker-compose 部署 MySQL 与 TDengine)
- [三、WSL 版本过旧报错排查](#三、WSL 版本过旧报错排查)
- [四、0x80072f7d 安全频道报错深度排障](#四、0x80072f7d 安全频道报错深度排障)
- [五、Docker Hub 拉取超时------配置国内镜像加速器](#五、Docker Hub 拉取超时——配置国内镜像加速器)
- 六、总结
一、安装 Docker Compose
Docker Compose 的安装通常有两种方式,根据你的环境选择即可。
方式一:通过 Docker Desktop(推荐新手)
如果你已经安装了 Docker Desktop,那么 Docker Compose 已内置,无需额外安装。
安装完成后,在终端验证:
bash
docker compose version
如果显示版本号(如 Docker Compose version v2.x.x),说明已可用。
注意 :Docker Desktop 自带的是 Compose V2 ,命令为
docker compose(空格,无横线),而不是旧版的docker-compose。
方式二:在 Linux 上独立安装 Compose V2(推荐服务器环境)
适用于服务器环境,无需安装完整的 Docker Desktop。
前提 :确保已安装 Docker Engine(如未安装,先执行 sudo apt-get install docker.io)。
下载最新版本的 Compose V2 二进制文件:
bash
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
如果下载缓慢,可使用国内镜像:
bash
sudo curl -L "https://get.daocloud.io/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
授予执行权限:
bash
sudo chmod +x /usr/local/bin/docker-compose
验证安装:
bash
docker-compose --version
# 或
docker compose version
补充:V1 与 V2 的区别
| 对比项 | V1 | V2 |
|---|---|---|
| 语言 | Python | Go |
| 命令格式 | docker-compose(横线) |
docker compose(空格) |
| 状态 | 已停止更新 | 官方推荐,速度更快、功能更全 |
目前所有主流 Linux 发行版建议直接安装 V2。
二、用 docker-compose 部署 MySQL 与 TDengine
在 Docker Desktop 上安装 MySQL 和 TDengine,最推荐的方式是用 docker-compose 统一管理,方便以后维护和扩展。
以下步骤假设你的 Docker Desktop 已正常运行。
1. 创建项目目录和编排文件
在任意目录(例如 ~/iot-platform)下创建 docker-compose.yml 文件:
yaml
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: iot-mysql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: root123 # 请修改为你的强密码
MYSQL_DATABASE: iot_platform # 自动创建的业务库
MYSQL_USER: iot_user
MYSQL_PASSWORD: iot_pass # 请修改为你的用户密码
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql # 数据持久化
command: --default-authentication-plugin=mysql_native_password
networks:
- iot-net
tdengine:
image: tdengine/tdengine:3.3.2.0 # 社区版最新稳定版
container_name: iot-tdengine
restart: unless-stopped
environment:
TAOS_FQDN: localhost # 单机部署必须设为 localhost
ports:
- "6030:6030" # RESTful / WebSocket 端口
- "6041:6041" # 原生接口端口
volumes:
- tdengine_data:/var/lib/taos
- tdengine_log:/var/log/taos
networks:
- iot-net
volumes:
mysql_data:
tdengine_data:
tdengine_log:
networks:
iot-net:
driver: bridge
关键配置说明:
- MySQL 的 root 密码、普通用户名密码请按需修改。
- TDengine 的
TAOS_FQDN对单机必须设为localhost,否则 taosAdapter 无法正常启动。 - 端口映射保持默认,避免与宿主机其他服务冲突。
2. 启动服务
在 docker-compose.yml 所在目录打开终端(PowerShell / CMD / 终端),执行:
bash
docker-compose up -d
-d 表示后台运行。等待镜像拉取和容器启动,大约需要 1~2 分钟。
3. 验证安装
MySQL 验证
bash
# 进入 MySQL 容器
docker exec -it iot-mysql mysql -u root -p
输入密码 root123,进入后执行:
sql
SHOW DATABASES;
可以看到自动创建的 iot_platform 数据库。也可以用宿主机上的 MySQL 客户端连接 localhost:3306,账号 root / 密码 root123 或 iot_user / iot_pass。
TDengine 验证
bash
# 进入 TDengine 容器
docker exec -it iot-tdengine bash
# 进入 TDengine CLI
taos
在 TDengine CLI 中执行:
sql
SHOW DATABASES;
如果看到 information_schema 等系统库,说明运行正常。也可以从宿主机浏览器访问 http://localhost:6041/,看到 TDengine 的欢迎页。
4. 后续管理命令
bash
docker-compose down # 停止所有服务
docker-compose down -v # 停止并删除数据卷(重置所有数据)
docker-compose logs -f # 查看运行日志
docker-compose restart mysql # 单独重启某一个服务
三、WSL 版本过旧报错排查
启动 Docker Desktop 时,如果弹出以下提示:
WSL needs updating
Your version of Windows Subsystem for Linux (WSL) is too old.
这是因为 Docker Desktop 依赖较新版本的 WSL 2 内核。
解决方案
以管理员身份运行 PowerShell,依次执行:
1. 更新 WSL 内核组件
powershell
wsl --update
如果提示"找不到命令",说明系统还缺少 WSL 组件,先执行:
powershell
wsl --install
2. 确保已安装 WSL 2 并设为默认
powershell
wsl --set-default-version 2
3. 重启 Docker Desktop
完全退出 Docker Desktop(系统托盘图标右键 → Quit),再重新启动。
4. 检查 WSL 版本
powershell
wsl --status
确认版本号大于 1.0.0,且内核版本较新。
四、0x80072f7d 安全频道报错深度排障
执行 wsl --update 时,可能遇到以下报错:
安全频道支持出错
错误代码: Wsl/UpdatePackage/0x80072f7d
这个错误通常表示 Windows 在下载 WSL 更新包时遇到 SSL/TLS 通信问题,多与网络环境、代理设置或系统更新服务有关。
以下是几种解决方案,按成功率从高到低排序。
方法一:通过 Web 下载方式更新 WSL(推荐)
绕过 Windows Update 通道,直接从微软官网拉取更新包:
powershell
wsl --update --web-download
如果成功,重启 Docker Desktop 即可。
但在某些环境下,
--web-download依然会报同样的0x80072f7d错误,说明问题出在系统根证书、TLS 配置或安全软件拦截上。此时需要继续尝试以下方法。
方法二:手动下载并安装 WSL 更新包
如果自动更新始终失败,可以直接下载 .msi 安装包手动安装。
下载地址(微软官方直链):
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
如果打不开,请检查系统日期/时间是否准确,或暂时关闭防火墙尝试。
安装步骤 :双击下载的 wsl_update_x64.msi,一路 Next 完成安装,会自动替换旧的 WSL 内核。
安装完成后,完全退出 Docker Desktop 再重新启动。
方法三:重置 Windows Update 组件
如果系统更新缓存或服务状态异常,也会导致下载失败。
以管理员身份运行 PowerShell,依次执行:
powershell
# 停止相关服务
net stop wuauserv
net stop cryptSvc
net stop bits
net stop msiserver
# 重命名更新缓存文件夹
ren C:\Windows\SoftwareDistribution SoftwareDistribution.old
ren C:\Windows\System32\catroot2 catroot2.old
# 重新启动服务
net start wuauserv
net start cryptSvc
net start bits
net start msiserver
完成后再次尝试 wsl --update。
方法四:检查 TLS 1.2 是否启用
错误 0x80072f7d 也可能是 TLS 协议问题。
- 按
Win + R,输入inetcpl.cpl打开 Internet 属性。 - 切换到 高级 选项卡,向下滚动到 安全 部分。
- 确保 使用 TLS 1.2 已勾选(以及 TLS 1.3 如存在也勾选)。
- 点击应用并确定,然后重试更新。
方法五:检查代理或 VPN 干扰
如果使用了系统代理或 VPN,可能会阻止 Windows 访问更新服务器。
临时关闭 VPN / 代理软件,或在 PowerShell 中清除代理设置:
powershell
netsh winhttp reset proxy
再试一次 wsl --update。
方法六:启用 Windows 功能并重启
有时 WSL 更新失败是因为 Windows 子系统未彻底启用。
在管理员 PowerShell 中运行:
powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重启电脑,再尝试手动安装 wsl_update_x64.msi。
验证 WSL 是否修复成功
执行以下命令:
powershell
wsl --status
如果输出类似如下内容:
默认分发: docker-desktop
默认版本: 2
说明 WSL 已正常工作,Docker Desktop 的 WSL 依赖已满足。
五、Docker Hub 拉取超时------配置国内镜像加速器
WSL 问题解决后,执行 docker-compose up -d 可能会遇到新的报错:
Error response from daemon: failed to resolve reference "docker.io/library/mysql:8.0":
failed to do request: Head "https://registry-1.docker.io/v2/library/mysql/manifests/8.0":
dialing registry-1.docker.io:443 container via direct connection because Docker Desktop has no HTTPS proxy:
connecting to registry-1.docker.io:443: dial tcp 69.171.229.11:443: connectex:
A connection attempt failed because the connected party did not properly respond...
这是因为 Docker Desktop 无法直接访问 Docker Hub(在国内非常常见),需要配置镜像加速器。
配置步骤
- 打开 Docker Desktop,点击右上角设置齿轮(Settings)。
- 选择左侧 Docker Engine。
- 在右侧的 JSON 配置中,添加
registry-mirrors节点。
修改后的完整配置示例:
json
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerhub.icu",
"https://docker.chenby.cn"
]
}
- 点击 Apply & Restart,等待 Docker 重启。
关于 "This can prevent Docker from starting" 警告
编辑配置时,Docker Desktop 会弹出提示:
This can prevent Docker from starting. Use at your own risk.
这是 Docker Desktop 编辑 daemon.json 时的标准安全提示,意思是"错误的配置可能导致 Docker 无法启动,请确认你清楚自己所做的修改"。并不是说当前配置有问题。
只要 JSON 格式正确(注意逗号和大括号配对),就是安全的。如果 Docker 启动失败(极少数情况),可以点击 Reset to factory defaults 恢复默认配置,再重新添加。
备用镜像地址
如果上面的镜像不可用,可以尝试以下备用地址:
https://mirror.ccs.tencentyun.com # 腾讯云(需账号,但有时可用)
https://hub-mirror.c.163.com # 网易
https://docker.mirrors.ustc.edu.cn # 中科大
重新拉取镜像
配置重启后,在 PowerShell 重新执行:
powershell
cd ~\桌面\IOT\deploy # 或你存放 docker-compose.yml 的目录
docker-compose up -d
这次应该能正常拉取镜像了。如果仍然失败,请检查网络是否连接,或尝试关闭/切换 VPN。
六、总结
整个部署过程遇到的问题及解决方式汇总如下:
| 序号 | 问题 | 原因 | 解决方案 |
|---|---|---|---|
| 1 | WSL 版本过旧 | Docker Desktop 依赖新版 WSL 2 内核 | wsl --update |
| 2 | 0x80072f7d 安全频道报错 |
SSL/TLS 通信问题、网络/代理拦截 | 手动下载 .msi 安装包 / 重置 Windows Update / 检查 TLS |
| 3 | Docker Hub 拉取超时 | 国内无法直连 Docker Hub | 配置国内镜像加速器 |
| 4 | 配置警告提示 | Docker Desktop 标准安全提示 | 确认 JSON 格式正确后放心 Apply |
关键经验
- WSL 报错优先尝试
--web-download,失败则直接手动下载.msi安装包,这是最稳妥的方式。 - 国内使用 Docker 必须配置镜像加速器,否则拉取镜像几乎必超时。建议同时配置多个镜像作为备份。
- 编辑 Docker Engine 配置时注意 JSON 格式,逗号和大括号一定要配对,配置错误会导致 Docker 无法启动。
- docker-compose 适合多容器统一管理 ,比单独
docker run更易维护,后续扩展服务也更方便。
完成以上步骤后,你就拥有了一个本地运行的 MySQL + TDengine 环境,可以开始搭建 IoT 平台的后端服务了。
本文环境:Windows + Docker Desktop + WSL 2
适用场景:本地开发环境搭建、IoT 平台数据库部署
如果在操作过程中遇到其他问题,欢迎在评论区留言交流!