本人在复现小智开源项目时,需要使用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 psdocker rm)来完成。

但是如果你也是像我只需要在Docker中部署容器,不需要进行一些复杂的操作,那可以直接部署原生Docker,硬核地使用命令行解决容器部署。

原生Docker的部署方法:

第一步:在开始前,必须确保旧的环境没有冲突。

  1. 卸载 Windows 端:在 Windows 控制面板中,彻底卸载 Docker Desktop(防止后台残留服务与 WSL2 发生死锁)。
  2. 打开 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-mysqlxiaozhi-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 托举起来。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐