Windows部署原生Docker,解决Docker Desktop卡在Starting界面的问题
本文分享了作者在Windows系统下使用Docker Desktop部署容器时遇到启动卡死问题的解决经验。通过改用原生Docker方案,作者详细记录了在WSL2的Ubuntu子系统中安装配置原生Docker的完整流程,包括卸载Docker Desktop、安装原生Docker引擎、配置国内镜像源等关键步骤。特别针对部署小智服务器所需的MySQL和Redis容器,文章提供了具体的容器创建命令和自启动
本人在复现小智开源项目时,需要使用Docker Desktop来部署MySQL和Redis容器;但是在每次关闭Docker Desktop后,都遇到卡在Starting界面,并且在网上找了很多解决方法都无效。(当然如果大家有更好的解决方法,欢迎大家分享)

最后我想的是既然每次都卡死在这个图形化界面上,那我干脆直接不要这个界面,直接使用原生的Docker。实现彻底甩掉了臃肿且易卡死的 Docker Desktop,让 MySQL 和 Redis 直接原生跑在 WSL2 的 Linux 内核中。
什么是Docker?
Docker 是一个开源的应用容器化平台(Containerization Platform)。它通过将应用程序及其所有依赖项(包括系统库、配置文件等)打包进一个高度隔离的、标准化的独立单元——容器(Container)中,确保软件在从开发者的笔记本电脑到测试环境、再到生产云端服务器的整个生命周期中,都能以完全相同的方式稳定、一致地运行,彻底解决了“在我的机器上能跑,但在别处崩溃”的环境兼容难题。
什么是Docker Desktop?
Docker Desktop 是一个专为 Windows 和 Mac 操作系统打造的一键式本地开发桌面应用。它在后台无缝集成了 Linux 虚拟化技术(如 WSL 2 或 Hyper-V)和核心的 Docker 引擎,并向开发者提供了一个直观的图形化用户界面(GUI)、本地 Kubernetes 集群以及 Docker Compose 等完整开发全家桶,让开发者无需在黑框终端里死记硬背复杂的 Linux 命令,只需通过鼠标点按即可在个人电脑上轻松创建、运行和管理容器化应用。
原生Dcoker的优缺点:
优点:完全免费、极为轻量、不占 Windows 内存、运行速度极快,且操作体验与真正的云服务器一模一样,对技术提升极大。
缺点:彻底没有了图形界面。你再也无法用鼠标去点“绿色播放键”来启动容器,也无法直观地看到日志,所有的容器查看、暂停、删除、修改,全部必须依赖你手敲 Linux 命令(如 docker ps、docker rm)来完成。
但是如果你也是像我只需要在Docker中部署容器,不需要进行一些复杂的操作,那可以直接部署原生Docker,硬核地使用命令行解决容器部署。
原生Docker的部署方法:
第一步:在开始前,必须确保旧的环境没有冲突。
- 卸载 Windows 端:在 Windows 控制面板中,彻底卸载 Docker Desktop(防止后台残留服务与 WSL2 发生死锁)。
- 打开 Ubuntu 终端:在 Windows 搜索栏输入
Ubuntu并打开,进入 Linux 命令行环境。(前提是Windows电脑中已经部署了Ubuntu)

第二步:在 Ubuntu 终端中,依次执行以下命令:
# 1. 下载官方自动化安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
# 2. 运行安装脚本 (中途遇到 "WSL DETECTED" 倒计时 20 秒,无视它,静静等待即可)
sudo sh get-docker.sh
# 3. 将你的当前用户加入 docker 用户组,实现免 sudo 敲命令
sudo usermod -aG docker $USER
注:执行完上面三行后,在终端输入 exit 彻底关闭当前 Ubuntu 窗口,然后重新打开一个新的 Ubuntu 终端,让免密权限生效。
第三步:配置国内加速镜像源(跳过 Timeout 核心步骤)
因为国内直连 Docker 官方服务器会超时,我们直接用 Nano 编辑器 强行焊死国内加速通道:
1、在终端输入命令打开编辑器(需要输密码,盲敲完回车即可,密码是Ubuntu 账户时设置的那个盲输密码):
sudo nano /etc/docker/daemon.json
2、在弹出的蓝黑色全屏界面中,直接鼠标右键粘贴以下内容:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.anyhub.us.kg"
]
}
3、保存退出
按键盘 Ctrl + O,然后按 回车(Enter) 确认保存。
按键盘 Ctrl + X 退出编辑器,回到绿色光标。
4、刷新并重启Docker
sudo systemctl daemon-reload
sudo service docker restart
5、检查安装
重启了终端后,直接在新的黑框框里输入
docker ps
如果终端没有提示 Permission denied,也没有报错,而是清爽地弹出了几列表格头部(如 CONTAINER ID, IMAGE, COMMAND)(如下图),那就说明:你已经用最极简、最硬核的方式,把纯原生 Docker 彻底降服在你的 Windows Ubuntu 子系统里了!

如果你想实现一些Dcoker别的功能,可以参考一下其它资料;如果你也是和我一样想要部署小智本地服务器,可以接着往下看。
第四步:部署容器
# 1. 启动 Redis 容器 (开放 6379 端口)
docker run -d --name xiaozhi-redis -p 6379:6379 redis:latest
# 2. 启动 MySQL 容器 (开放 3306 端口,请把 '你的密码' 换成你项目实际要求的数据库密码)
docker run -d --name xiaozhi-mysql -e MYSQL_ROOT_PASSWORD=你的密码 -p 3306:3306 mysql:8.0
注意:在我部署小智服务器场景中,需要保证创建 MySQL 时设定的初始密码,与小智项目代码(application.yml)中死锁的默认密码一致
第五步:检查容器运行状态
docker ps
如果表格里整整齐齐出现了 xiaozhi-mysql 和 xiaozhi-redis,并且 STATUS 显示为 Up ...,说明软件全线畅通!
第六步:启动Docker和容器
由于 WSL2 的机制,Windows 每次关机重启后,Linux 内部的服务默认是熄火的。你下次开机想要调试时,只需要打开 Ubuntu 终端,无脑敲入这三行上电口诀即可:
sudo service docker start # 1. 唤醒 Docker
docker start xiaozhi-redis # 2. 一键热启动 Redis
docker start xiaozhi-mysql # 3. 一键热启动 MySQL
第七步:实现容器自启动(可选)
首先,用 Nano 编辑器修改 WSL 配置文件
sudo nano /etc/wsl.conf
其次,把“开机自启”的协议写进去,在打开的编辑器空白处,右键粘贴以下两行内容:
[boot]
systemd=true
然后按下 Ctrl + O 键,再按 回车(Enter) 保存;接着按下 Ctrl + X 退出编辑器。
随后,设置容器为自启动模式。
在 Ubuntu 里连续敲入这两行命令,告诉 Docker 以后只要引擎启动,这两个数据库必须自动站起来:
docker update --restart=always xiaozhi-redis
docker update --restart=always xiaozhi-mysql
最后,重置WSL,回到你的 Windows CMD 终端,输入以下命令让配置彻底生效:
wsl --shutdown
完成上述步骤后,你重新启动电脑,当其它操作调用的时候它们就可以自动启动。
我的场景是本地部署小智服务器,所以我在启动小智服务器时,在 Windows 侧运行我的 manager-api 主程序,电脑就可以自动唤醒WSL2 Ubuntu,而Ubuntu 里的 systemd 自动点火 Docker 引擎,引擎根据 always 策略自动把 MySQL 和 Redis 托举起来。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐
所有评论(0)