本人在复现小智开源项目时需要使用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.json2、在弹出的蓝黑色全屏界面中直接鼠标右键粘贴以下内容{ 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、刷新并重启Dockersudo systemctl daemon-reload sudo service docker restart5、检查安装重启了终端后直接在新的黑框框里输入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中死锁的默认密码一致MySQL容器中部署数据库1、进入MySQL的容器的命令行docker exec -it xiaozhi-mysql mysql -u root -p执行后会提示Enter password:请输入你创建该容器时设置的 MySQL root 密码通常是123456。2、成功登录 MySQL 后命令提示符变成mysql直接复制并执行这行 SQL 语句CREATE DATABASE xiaozhi_esp32_server CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;3、退出 MySQL 和容器exit;4、创建一个xiaozhi_esp32_server的空数据库密码是MySQL root 密码docker exec -i xiaozhi-mysql mysql -uroot -p你的密码 -e CREATE DATABASE IF NOT EXISTS xiaozhi_esp32_server CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;5、验证空数据库是否创建成功docker exec -i xiaozhi-mysql mysql -uroot -p123456 -e SHOW DATABASES;如果在打印出来的列表里看到了xiaozhi_esp32_server说明创建成功。第五步检查容器运行状态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] systemdtrue然后按下Ctrl O键再按回车(Enter)保存接着按下Ctrl X退出编辑器。随后设置容器为自启动模式。在 Ubuntu 里连续敲入这两行命令告诉 Docker 以后只要引擎启动这两个数据库必须自动站起来docker update --restartalways xiaozhi-redis docker update --restartalways xiaozhi-mysql最后重置WSL回到你的 Windows CMD 终端输入以下命令让配置彻底生效wsl --shutdown完成上述步骤后你重新启动电脑当其它操作调用的时候它们就可以自动启动。我的场景是本地部署小智服务器所以我在启动小智服务器时在 Windows 侧运行我的manager-api主程序电脑就可以自动唤醒WSL2 Ubuntu而Ubuntu 里的systemd自动点火 Docker 引擎引擎根据always策略自动把 MySQL 和 Redis 托举起来。
Windows部署原生Docker,解决Docker Desktop卡在Starting界面的问题
本人在复现小智开源项目时需要使用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.json2、在弹出的蓝黑色全屏界面中直接鼠标右键粘贴以下内容{ 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、刷新并重启Dockersudo systemctl daemon-reload sudo service docker restart5、检查安装重启了终端后直接在新的黑框框里输入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中死锁的默认密码一致MySQL容器中部署数据库1、进入MySQL的容器的命令行docker exec -it xiaozhi-mysql mysql -u root -p执行后会提示Enter password:请输入你创建该容器时设置的 MySQL root 密码通常是123456。2、成功登录 MySQL 后命令提示符变成mysql直接复制并执行这行 SQL 语句CREATE DATABASE xiaozhi_esp32_server CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;3、退出 MySQL 和容器exit;4、创建一个xiaozhi_esp32_server的空数据库密码是MySQL root 密码docker exec -i xiaozhi-mysql mysql -uroot -p你的密码 -e CREATE DATABASE IF NOT EXISTS xiaozhi_esp32_server CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;5、验证空数据库是否创建成功docker exec -i xiaozhi-mysql mysql -uroot -p123456 -e SHOW DATABASES;如果在打印出来的列表里看到了xiaozhi_esp32_server说明创建成功。第五步检查容器运行状态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] systemdtrue然后按下Ctrl O键再按回车(Enter)保存接着按下Ctrl X退出编辑器。随后设置容器为自启动模式。在 Ubuntu 里连续敲入这两行命令告诉 Docker 以后只要引擎启动这两个数据库必须自动站起来docker update --restartalways xiaozhi-redis docker update --restartalways xiaozhi-mysql最后重置WSL回到你的 Windows CMD 终端输入以下命令让配置彻底生效wsl --shutdown完成上述步骤后你重新启动电脑当其它操作调用的时候它们就可以自动启动。我的场景是本地部署小智服务器所以我在启动小智服务器时在 Windows 侧运行我的manager-api主程序电脑就可以自动唤醒WSL2 Ubuntu而Ubuntu 里的systemd自动点火 Docker 引擎引擎根据always策略自动把 MySQL 和 Redis 托举起来。