解决Docker使用WSL2项目运行慢的问题

其实在WSL1下速度还可以接受,但在WSL2下简直忍无可忍,加载一个页面或请求一个接口,本来毫秒响应的在WSL2下需要2~4s。

一. WSL1 VS WSL2

先来看看微软官方的说明
解决docker使用WSL2项目运行慢的问题

官方已经告诉了我们关键问题和解决方案,WSL2的跨文件系统的性能堪忧,不要将项目挂载到Windows系统中,
而是挂载到WSL文件系统中。

二. 将项目挂载到WSL2下(WSL2安装参考)

我原来的项目目录挂载如图

解决docker使用WSL2项目运行慢的问题

  • 进入WSL2子系统(我使用的发行版是Ubuntu)
  • 将项目目录复制到Ubuntu /var下
  • 修改挂载路径
    volumes:
        - /var/www/:/var/www/

三. 在WSL2中启动容器

在WSL2中从/mnt进入到对应的docker-compose.yml目录启动容器即可。

解决docker使用WSL2项目运行慢的问题

现在再运行项目,又回到了丝滑的感觉

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 44

wsl2可以直接使用docker了吗???

4年前 评论
xing393939 4年前
sunny123456 (作者) 4年前

然而IDE打开项目又卡成狗

4年前 评论
坐忘 4年前
浮心 2年前
capture (楼主) 4年前
capture (楼主) 4年前

wsl1 能用docker么

4年前 评论
capture (楼主) 4年前

WSL2 前些日子还在家里机器上折腾过,死活没装上 docker ,就很奇了怪 :unamused:

4年前 评论
capture (楼主) 4年前

取消勾选wsl也可以,每次使用wsl 就会有一个Vmmem进程启动,巨占内存

file

4年前 评论
capture (楼主) 4年前
翟宇鑫

Hi,想请教楼主一个问题哈,今天重新看一个多月没看的项目,但很多命令执行起来都报错 Segmentation fault;不知道楼主有碰到过没? file 使用的是 WSL2,Ubuntu 20,宝塔

4年前 评论
capture (楼主) 4年前
  • 将项目目录复制到 Ubuntu /var 下 就这步 开发算了 :sob: 老老实实用hyper-v
4年前 评论
capture (楼主) 4年前
linxianfu

@crackfan hyper-v运行laravel快吗

4年前 评论

@linxianfu 起码比wsl2快的多

4年前 评论
李铭昕

运行代码在wsl里,但开发代码还是得在win里吧。。这样用win的编辑器打开项目,理论上也很慢吧

4年前 评论
capture (楼主) 4年前
李铭昕 (作者) 4年前
capture (楼主) 3年前
李铭昕 (作者) 3年前
李铭昕 (作者) 3年前
capture (楼主) 3年前
浮心 2年前

项目直接放wsl里的话,宿主机(window)打开又卡成狗了... 感觉还是直接虚拟机吧 折腾

3年前 评论
李铭昕 3年前

wsl 目前还不支持 systemctl

3年前 评论

把项目拷贝到WSL2中 , 再用phpstorm 打开WSL2项目 , 的确重启如丝般顺滑 . 但是phpstorm的File watcher插件报错了 , 报错信息如下 [CentOS7] File watcher failed repeatedly and has been disabled

3年前 评论
overfalse 3年前
path /mnt/e/dnmp/data/mysql5 is mounted on /mnt/e but it is not a shared mount. 

为什么我报这个错

3年前 评论
LXK 2年前

看来不只我一个人有这问题啊…………那我就放心了。

3年前 评论

我看网上有建议把代码放在\wsl$\docker-desktop\mnt\host\wsl\docker-desktop,这个目录在wsl里或ubuntu里如何访问啊

2年前 评论
LXK 2年前

docker run --name php8 -d -p 8087:9000 -it --net php --ip 172.172.0.7 -v \wsl.localhost\Ubuntu-20.04\docker\php\www:/var/www/html --privileged -u root 8c 确实快很多,直接挂载到ubantu里面。

2年前 评论

我找到一个更好的办法,就是弄2份代码

一份放在 window 磁盘,提供给 phpstorm 编辑器访问 一份放在 wsl 虚拟机里,提供给 docker 服务访问

然后在 wsl 里装 ftp 服务, phpstorm 里通过 Tools => deployment 配置 ftp 同步代码

2年前 评论
晏南风 2年前
浮心 (作者) 2年前
浮心 (作者) 2年前

既然WSL能通过/mnt目录直接访问到windows下的目录,那么直接用/mnt下的php代码目录跟容器的www目录做映射不就好了。比如我windows的php代码在D:\dnmp\www,php容器代码目录那么映射就是/mnt/d/dnmp/www/:/var/www/,这样就不存在代码同步问题,因为D:\dnmp\www/mnt/d/dnmp/www/数据本来就是同步的

1周前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!