在Nginx容器WSL2上运行Laravel时,Docker速度极慢 [英] Docker is extremely slow when running Laravel on Nginx container wsl2

查看:20
本文介绍了在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆