WSL2安装配置及Windows Docker Cli配置

因VSCode中没有IDEA那般优雅地运行Dockerfile,故此便有了这篇技术水贴,感谢各位论坛大佬的分享与解答。
->实现本机无docker环境,远程docker build构建

请教VSCode如何优雅使用Docker - #6,来自 admini
WSL2配置完全指北——手把手教你配置WSL2
彻底摆脱docker-desktop,让你在wsl中没有任何烦恼地使用docker
一键脚本使换源更简单 - LinuxMirrors
https://bsdayo.moe/posts/use-docker-cli-in-windows/

安装Debian

打开PowerShell,安装Linux子系统。

若未安装 Windows Subsystem for Linux 将提示按任意键安装 WSL并开启相应的Windwos功能组件,如 Hyper-V,重启 系统 执行:

wsl --install -d Debian # 按照提示创建非 root 用户以安装 Debian 到 WSL 中

迁移系统安装路径

(可选)迁移Linux子系统安装路径【迁移后系统默认将以root用户作为默认操作】

wsl --export Debian D:\Debian12.tar					# 导出系统
wsl --unregister Debian								# 取消系统挂载
wsl --import Debian D:\wsl2\Debian D:\Debian12.tar	# 导入并重新挂载系统在 D:\wsl2\Debian

优化资源分配

  1. 优化 WSL 运行占用
wsl				# 启动一次 Debian,以便让系统自动初始化创建相关配置文件
exit			# 退出回到 Windows 终端
  1. Win + R 在输入框中输入 %UserProfile% 回车,在目录中编辑 .wslconfig 文件,若无可手动创建同名文件,注意文件编码格式
[wsl2]
# 处理器核心数
processors=4
# 最大运行内存
memory=4GB
# 交换分区大小
swap=4GB

保存关闭,执行 wsl --shutdown 重启WSL

基础配置

  1. 更新软件源
sudo apt update && sudo apt-get update
  1. 确保启用 systemd
vi /etc/wsl.conf

文件如下内容:

[boot]
systemd=true
  1. 确保启用SSH登录

    sudo apt install openssh-server
    systemctl enable ssh
    systemctl start ssh
    

    开启SSH密码、密钥登录

    vi /etc/ssh/sshd_config
    
    # 逐个放开配置注释并修改如下
    PermitRootLogin yes
    
    PubkeyAuthentication yes
    
    PasswordAuthentication yes
    
  2. 启用镜像网络,Debian系统ip即宿主机ip,宿主机可通过localhost访问,局域网可通过宿主机ip直接访问当前Debian,编辑 .wslconfig 文件,增加下方配置内容

# 启用镜像网络模式
networkingMode=mirrored
# 共用宿主机DNS
dnsTunneling=true
# 自动共用宿主机代理
autoProxy=true

[experimental]
# 端口映射到宿主机
hostAddressLoopback=true

配置完成后再次重启WSL wsl --shutdown

PS:使用 SSH 连接 22 端口,若提示 connect reset 请注意 Windows 防火墙 规则

安装Docker

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

# 将当前用户组添加到Docker账户组
sudo usermod -aG docker $USER
newgrp docker

编辑 ~/.bashrc 文件,在文件末尾增加如下内容

# 避免非root用户每次都需要 newgrp docker 才能执行docker命令
groupadd -f docker

Windows安装Docker Cli

配置上下文实现宿主机在无Docker环境的情况下,一样能够执行docker命令进行拉取、构建镜像,建议与WSL配合实现快速传输

winget install Docker.DockerCLI # 安装完毕后重启终端 docker 命令行生效

打开 WSL 中 Docker 的 TCP 远程访问

vi /lib/systemd/system/docker.service # 找到 [Service] 标签进行编辑

增加一个 -H 选项,指定监听的主机和端口,如下:

# 默认
[Service]
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

# 开启tcp访问
[Service]
ExecStart=/usr/bin/dockerd -H tcp://127.0.0.1:2375 -H fd:// --containerd=/run/containerd/containerd.sock

保存并重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

配置Windows Docker Cli

# 测试连接
docker -H tcp://127.0.0.1:2375 info # 本机只装了Client,若是输出的Server没有error即连接正常
# 创建 docker 连接上下文 context
docker context create wsl --docker "host=tcp://127.0.0.1:2375"

# 切换到这个 context
docker context use wsl

# 测试
docker info

快捷启动/关闭WSL(隐藏终端窗口)

' 保存为 run_debian_wsl.vbs
set ws=wscript.CreateObject("wscript.shell")
ws.run "wsl -d Debian", 0
' 保存为 shutdown_all_wsl.vbs
set ws = CreateObject("wscript.shell")
ws.run "wsl --shutdown", 0
20 个赞

感谢大佬教程

1 个赞

感谢分享、

2 个赞

这个很有用

1 个赞

有没有办法弄到像vmware那种桥接模式,wsl与宿主机在同一网络下

1 个赞

mark一下:tieba_001:

1 个赞

handsome 你绝对是住在论坛了

1 个赞

可以参考第二篇引用,不开启镜像网络就是桥接,好像默认也是桥接模式来着

感谢学习了

现在新安装的WSL都会多一个叫WSL Settings的App,可以直接在里边可视化配置WSL的资源占用和网络模式,你可以搜索看看

1 个赞

直接装docker desktop 就行了吧

好的感谢

最直截了当的方法当是如此,不过我是拒绝docker desktop的,主要还是看个人选择

mark,睡醒学习,感谢大佬!

使用镜像网络,我宿主机开代理的话,连apt update都网络错误,不知道佬友碰过没,我还得改apt的配置文件

这个我倒没遇到呢,可以看看第四个引用,直接把debian软件源也换了得了:lark_085:

感谢大佬

佬我想问一下镜像模式对硬件网卡有没有要求,我的网卡是螃蟹8125我装了server2025,该装的组件都装了,但是一直报错

wsl: 指定的请求不受支持。
错误代码: CreateInstance/CreateVm/ConfigureNetworking/0x803b0015
wsl: 无法配置网络 (networkingMode Mirrored),回退到 networkingMode None。

这个我就不太清楚了,我新换的电脑也是螃蟹网卡,到手就换MT7922了

这让我想起一件事

前两天在docker desktop搞meta mcp,结果不知道为啥突然疯狂读写,我的三星数据盘被干到60多度直接自动掉盘了

一开始微信提示数据错误(微信聊天记录跟wsl一块盘),没管,吃了个饭回来天塌了
:hot_face: