在Nginx容器WSL2上运行Laravel时,Docker速度极慢 [英] Docker is extremely slow when running Laravel on Nginx container wsl2
本文介绍了在Nginx容器WSL2上运行Laravel时,Docker速度极慢的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已将Windows 10更新到2004年的最新版本,安装并更新了WSL2,安装了docker和ubuntu。
当我使用Hello World";创建一个简单的index.php文件时,它工作得很好(响应:100-400ms),但当我添加Laravel项目时,它变得很糟糕,因为它在执行请求之前加载了7秒,响应是4-7秒😢,尽管PHPMyAdmin运行非常顺利(响应:1-2秒)。
我的docker-compose.yml文件:
version: '3.8'
networks:
laravel:
services:
nginx:
image: nginx:stable-alpine
container_name: nginx
ports:
- "8080:80"
volumes:
- ./src:/var/www/html
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
depends_on:
- php
- mysql
- phpmyadmin
networks:
- laravel
mysql:
image: mysql:latest
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: secret
SERVICE_TAGS: dev
SERVICE_NAME: mysql
networks:
- laravel
phpmyadmin:
image: phpmyadmin/phpmyadmin
restart: always
depends_on:
- mysql
ports:
- 8081:80
environment:
PMA_HOST: mysql
PMA_ARBITRARY: 1
php:
build:
context: .
dockerfile: Dockerfile
container_name: php
volumes:
- ./src:/var/www/html
ports:
- "9000:9000"
networks:
- laravel
composer:
image: composer:latest
container_name: composer
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
depends_on:
- php
networks:
- laravel
npm:
image: node:latest
container_name: npm
volumes:
- ./src:/var/www/html
working_dir: /var/www/html
entrypoint: ['npm']
artisan:
build:
context: .
dockerfile: Dockerfile
container_name: artisan
volumes:
- ./src:/var/www/html
depends_on:
- mysql
working_dir: /var/www/html
entrypoint: ['php', '/var/www/html/artisan']
networks:
- laravel
我已经尝试解决此问题2天了,但找不到答案。
谢谢
推荐答案
看起来您正在容器中挂载您的Laravel项目。如果要将这些文件从Windows环境装载到WSL 2,这可能会导致非常糟糕的文件I/O,因为WSL 2当前在访问Windows环境中的文件时遇到了很多问题。此I/O问题存在于2020年7月,您可以在Githubhere上找到该问题的持续状态。
我可以想到三种可能的解决方案来暂时解决此问题。
禁用坞站的基于WSL 2的引擎,直到问题得到解决
由于此问题仅在WSL 2尝试访问Windows文件系统时发生,因此您可以选择禁用WSL 2停靠器集成,而在Windows环境中运行您的容器。您可以在Docker Desktop的UI中找到禁用该功能的选项:将项目存储在WSL 2的Linux文件系统中
同样,由于此问题发生在WSL 2尝试访问/mnt
下的Windows文件系统的挂载点时,您可以选择将项目存储到WSL 2的Linux文件系统上。
构建您自己的Dockerfile
您可以选择创建自己的Docker文件,而不是挂载您的项目,您可以将所需的目录COPY
放入docker镜像中。这将导致较差的构建性能,因为WSL 2仍必须访问您的Windows文件系统才能构建这些停靠器映像,但运行时性能会好得多,因为它不必每次都从Windows环境中检索这些文件。
这篇关于在Nginx容器WSL2上运行Laravel时,Docker速度极慢的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文