Windows 上 Docker Desktop 部署 MySQL + TDengine 全过程(含 WSL 报错与镜像加速排障实战)

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 / 密码 root123iot_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 协议问题。

  1. Win + R,输入 inetcpl.cpl 打开 Internet 属性。
  2. 切换到 高级 选项卡,向下滚动到 安全 部分。
  3. 确保 使用 TLS 1.2 已勾选(以及 TLS 1.3 如存在也勾选)。
  4. 点击应用并确定,然后重试更新。

方法五:检查代理或 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(在国内非常常见),需要配置镜像加速器。

配置步骤

  1. 打开 Docker Desktop,点击右上角设置齿轮(Settings)。
  2. 选择左侧 Docker Engine
  3. 在右侧的 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"
  ]
}
  1. 点击 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

关键经验

  1. WSL 报错优先尝试 --web-download ,失败则直接手动下载 .msi 安装包,这是最稳妥的方式。
  2. 国内使用 Docker 必须配置镜像加速器,否则拉取镜像几乎必超时。建议同时配置多个镜像作为备份。
  3. 编辑 Docker Engine 配置时注意 JSON 格式,逗号和大括号一定要配对,配置错误会导致 Docker 无法启动。
  4. docker-compose 适合多容器统一管理 ,比单独 docker run 更易维护,后续扩展服务也更方便。

完成以上步骤后,你就拥有了一个本地运行的 MySQL + TDengine 环境,可以开始搭建 IoT 平台的后端服务了。


本文环境:Windows + Docker Desktop + WSL 2

适用场景:本地开发环境搭建、IoT 平台数据库部署

如果在操作过程中遇到其他问题,欢迎在评论区留言交流!

相关推荐
ᥬ 小月亮5 小时前
SonarQube使用教程(Docker安装)
运维·docker·容器
自律最差的编程狗7 小时前
从零搭建:VMware + Ubuntu + Docker + MySQL 完整指南
mysql·ubuntu·docker
Richard.Wong8 小时前
Windows IIS 服务器部署 Vue3 前端项目详细流程
服务器·前端·windows
tianyu2348 小时前
MySQL字符串处理函数完全指南:从入门到实战
mysql·字符串·函数·截取
天空之外1368 小时前
Docker安装MySQL 8.4 LTS、Docker安装Redis 7.4.x、Docker安装MinIO
java·mysql·docker
空谷有来人9 小时前
springcloud中配置ci/cd集成docker的配置文件
spring cloud·ci/cd·docker
空谷有来人9 小时前
docker安装redis
redis·docker·容器
Ai拆代码的曹操10 小时前
K8s 实战:CrashLoopBackOff 状态下 kubectl logs 拿不到日志的三层排查方案
linux·docker·kubernetes
spider_xcxc11 小时前
Docker 部署核心法则:一次构建,多处运行
java·开发语言·docker