1.升级WSL2
我的 win10 wsl默认版本是1,先要升级WSL2不然不支持systemd(后台守护进程)
双击直接安装就行,安装包网上都能找到: Microsoft.WSL_1.3.17.0_x64_ARM64.msixbundle
执行 wsl --version 显示这样成功了:
C:\Users\xx>wsl --version
WSL 版本: 1.3.17.0
内核版本: 5.15.90.4-1
WSLg 版本: 1.0.57
MSRDC 版本: 1.2.4485
Direct3D 版本: 1.608.2-61064218
DXCore 版本: 10.0.25880.1000-230602-1350.main
Windows 版本: 10.0.19045.2846
wsl -s centos7 设置为默认进入的发行版 这样直接输入 wsl 就进入centos了
wsl -l -v 查看当前安装了哪些发行版
2.安装CentOS7 (很多博客有相关介绍不多说了)
github上能找到 CentOS7.zip
解压到指定目录,执行 CentOS7.exe 即可
3.安装docker
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
#开机启动
systemctl enable docker
#启动docker服务
systemctl start docker
升级wsl2就是为了支持daemon进程,需要创建一个文件
/etc/wsl.conf:
[boot]
systemd=true
4.开机启动wsl
折腾很久,采用win计划任务 不行,总是报错0x1,
所以采用shell:common startup目录内放入快捷方式的方式(开机执行): (之前放shell:startup目录是需要当前用户登录后才执行)
创建wsl-startup.vbs 文件:
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl.exe -d centos7, 0
创建个wsl-startup.vbs 快捷方式 丢到shell:startup目录(win+R 输入shell:common startup 回车就能打开目录),
放到超级管理员(administrator)账号的 shell:startup目录 不登录可执行, 其它账号要登录才执行
放到shell:common startup目录,不登录可执行,但似乎每个账号都执行了一次,导致产生两个wsl进程,以下供参考
vbscript
set ws=wscript.CreateObject("wscript.shell")
rem 以下,放到user1账号的 shell:startup 重启启后总是要输入密码导致执行失败
rem 以下,放到administrator账号的 shell:startup 预先执行一遍保存下密码 居然不用登录就会执行!!
ws.run "runas /savecred /user:user1""wsl.exe -d centos7""", 0
rem 以下,放到administrator账号的 shell:startup 不用登录 仍然用administrator执行, cpau切换用户没用
rem ws.run "cpau -hide -u user1 -p pwd -ex ""wsl.exe -d centos7""", 0
rem 以下,放到martin账号的 shell:startup 重启启后 要登录martin账号才执行
rem 以下,放到administrator账号的 shell:startup 重启启后 不登录能执行且执行账号是administrator
rem ws.run "wsl.exe -d centos7", 0
rem 以下 放到shell:common startup文件夹中,不用登录,并以administrator身份执行 runas切换用户有用,似乎administrator登录后会多出一个命令窗口,似乎每个用户都会执行一遍 导致多创建了一个进程
rem ws.run "runas /savecred /user:user1 ""wsl.exe -d centos7""", 0
rem 以下 放到shell:common startup文件夹中,不用登录,并以administrator身份执行 cpau切换用户没用
rem ws.run "cpau -hide -u user1 -p pwd -ex ""wsl.exe -d centos7""", 0
rem ws.run "cmd.exe /c ""echo %date% %time% end"" > D:\develop\wsl\mywsl.log", 0
rem ws.run "cmd.exe /c echo begin > E:\develop\wsl\mywsl.log", 0
rem set r=ws.run "cmd.exe /c wsl.exe -d centos7", 1
rem ws.run "cmd.exe /c C:\Users\User1\AppData\Local\Microsoft\WindowsApps\wsl.exe -d centos7 > E:\develop\wsl\mywsl.log", 0
rem ws.run "cmd.exe /c echo end >> E:\develop\wsl\mywsl.log", 0
5.坑
wsl命令窗口关了,wsl系统以及docker服务就停了,再打wsl进入要5s左右,再docker ps 会卡住5分钟,于是各种折腾,但是都不行。
后来采用 systemd-analyze blame,journalctl -xe,systemctl status network等 分析发现是network启动失败导致,网上各种方法试了都不行,未找到原因
network启动失败 直到5分钟超时后,才启动docker服务, 导致 docker ps等命令要等5分钟,
解决方案:systemctl disable network把他禁用 就解决了