最近在尝试从群晖转向winnas,一些简单的服务依然计划使用docker来部署。群晖的docker简单易用且稳定,在win上使用docker desktop过程中遇到了不少问题,在此记录一下以供后来人参考。
一、安装docker desktop后启动时遇到无法启动docker引擎
原因一:没有安装wsl
解决方法:安装wsl。网上安装wsl的教程还是不少,参考教程安装即可。
注意事项(1):安装wsl过程中遇到0x80072EE7错误
解决方法:
1. 管理-服务-中打开windows update;
2. dns设置为4.2.2.1
注意事项(2):安装wsl过程中遇到0x80072ee2错误
问题原因,无法访问远程服务器(网络)
解决方法:手动下载wsl分发版本安装(网上搜索能搜到如何手动下载安装),或者想办法访问外网。
原因二:要把wsl内核版本从1升到2:
获取WSL2 Linux内核更新包并运行
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
将 WSL 2 设置为默认版本
命令行运行:
wsl --set-default-version 2
然后再更新wsl内核
wsl --update
参考:
如何使用
wsl --update
命令来更新WSL的内核?更新WSL(Windows Subsystem for Linux)内核的步骤可能会因Windows版本的不同而有所差异。以下是在不同Windows版本上使用
wsl --update
命令更新WSL内核的步骤:在Windows 11上更新WSL内核:
- 点击Windows 11的“开始”按钮。
- 搜索“命令提示符”,在搜索结果中右击“命令提示符”,并选择“以管理员身份运行”选项。
- (可选)输入以下命令以确认当前的WSL版本,然后按“Enter”键:
wsl --version
- 输入以下命令以更新WSL,并按“Enter”键:
wsl --update
- (可选)输入以下命令以确认已安装了最新的内核更新,然后按“Enter”键:
wsl --version
- (可选)输入以下命令以恢复到WSL的先前版本,然后按“Enter”键:
wsl --update --rollback
- 完成以上步骤后,如果有可用的更新,它将下载并安装到你的电脑上1。
在Windows 10上更新WSL内核:
- 点击“开始”按钮。
- 搜索“命令提示符”,在搜索结果中右击“命令提示符”,并选择“以管理员身份运行”选项。
- 输入以下命令以更新WSL内核,并按“Enter”键:
wsl --update
- 等待命令执行完成,它会自动检查并下载可用的内核更新2。
二、docker desktop(wsl)内存开销大,通过配置文件限制内存使用
标题并不准确,应该是wsl内存消耗大,为了好理解,统称为docker内存开销大。
我的winnas跑在一个小工控机上,性能差,内存只有8GB,内存消耗敏感。wsl开始默认就占了快4GB,所以要通过wsl配置文件限制内存消耗。
配置wsl有两种方法,一种是全局配置;一种是单个wsl分发版配置,网上都有不少教程。
微软官方文档如下:
WSL 中的高级设置配置 | Microsoft Learn
我用到了全局配置:
修改C:\Users\【用户名】文件夹下的.wslconfig文件,就可以更改wsl全局配置。
注意事项(1):这个文件夹下没有这个文件的,直接自己新建一个就行,.txt文件改.wslconfig就可以。
注意事项(2):不同win版本的可配置项是不同的,具体参考微软官方文档。
我的是win10,借用网上前辈的配置,简单改了一下,供参考:
[experimental]
#自动释放内存
autoMemoryReclaim=gradual
#网络镜像模式
#networkingMode=mirrored
#hostAddressLoopback=true
[wsl2]
memory=800MB
swap=0GB
#共用 Windows DNS、防火墙、代理设置
dnsTunneling=true
firewall=true
autoProxy=true
注意事项(3):8秒规则,wsl完全停止需要8秒
wsl在手动停止运行后是需要时间将全部服务停止的,一般会需要8秒左右。wsl8秒完全停止后,再重新启动才会正确读取更新的配置文件。如果wsl停止后立即改变配置文件立即重启,是有可能不会读取新修改的配置文件,还会沿用上一次配置。
注意事项(4):wsl最小内存配置800MB。
我个人简单测试了一下,在docker容器很少,很低负载情况下,wsl也需要800MB内存才能稳定运行。在700MB内存下就会出现wsl或容器停止运行的情况,不稳定。
内存配置仅供参考。
判断docker运行情况的小技巧:
在docker desktop主界面中【Container memory usage】和左下角【RAM】都正常显示数值的时候,wsl就在正常运行。这两个数值任何一个不正常显示数据了wsl就是崩了。
三、docker desktop设置容器自动重启
通常希望容器在遇到问题停止后能够自动重启。
(1)容器部署时设置自动重启
查查网上教程吧。
(2)容器部署后设置自动重启
通过命令行更新单个容器配置:
docker update --restart=【重启方式参数】 【容器ID(或者容器名)】
如:
docker update --restart=unless-stopped ABCDFEGHI
常用重启方式参数:
no:容器非正常退出时不重启。
on-failure:容器因错误退出时重启,重启次数可以限制。
always:无论退出状态如何,总是重启容器。
unless-stopped:容器退出后总是重启,除非它被用户明确停止。
容器ID:
在docker desktop中可以查看并复制。
以上。有帮到你的话请留个言回复一下。