在winnas中使用docker desktop遇到的问题及解决方法记录

最近在尝试从群晖转向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内核:

  1. 点击Windows 11的"开始"按钮。
  2. 搜索"命令提示符",在搜索结果中右击"命令提示符",并选择"以管理员身份运行"选项。
  3. (可选)输入以下命令以确认当前的WSL版本,然后按"Enter"键:wsl --version
  4. 输入以下命令以更新WSL,并按"Enter"键:wsl --update
  5. (可选)输入以下命令以确认已安装了最新的内核更新,然后按"Enter"键:wsl --version
  6. (可选)输入以下命令以恢复到WSL的先前版本,然后按"Enter"键:wsl --update --rollback
  7. 完成以上步骤后,如果有可用的更新,它将下载并安装到你的电脑上1

在Windows 10上更新WSL内核:

  1. 点击"开始"按钮。
  2. 搜索"命令提示符",在搜索结果中右击"命令提示符",并选择"以管理员身份运行"选项。
  3. 输入以下命令以更新WSL内核,并按"Enter"键:wsl --update
  4. 等待命令执行完成,它会自动检查并下载可用的内核更新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中可以查看并复制。

以上。有帮到你的话请留个言回复一下。

相关推荐
theo.wu34 分钟前
使用Buildpacks构建Docker镜像
运维·docker·容器
枫叶丹43 小时前
【在Linux世界中追寻伟大的One Piece】进程信号
linux·运维·服务器
刻词梨木3 小时前
ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
linux·运维·ubuntu
灯火不休ᝰ4 小时前
[win7] win7系统的下载及在虚拟机中详细安装过程(附有下载文件)
linux·运维·服务器
HHoao8 小时前
Ubuntu启动后第一次需要很久才能启动GTK应用问题
linux·运维·ubuntu
小灰兔的小白兔8 小时前
【Ubuntu】Ubuntu常用命令
linux·运维·ubuntu
winds~8 小时前
ubuntu中软件的进程管理-结束软件运行
linux·运维·ubuntu
bush48 小时前
使用root账号ssh登录虚拟机ubuntu
运维·ubuntu·ssh
叫我龙翔9 小时前
【Linux】进程间关系与守护进程
linux·运维·服务器·计算机网络
S hh9 小时前
【Linux】进程地址空间
java·linux·运维·服务器·学习