繁体   English   中英

为什么我的 php docker 容器在 Windows 11 上这么慢?

[英]Why is my php docker container so slow on Windows 11?

我正在尝试在我的 Windows 11(内部版本:22000.376)笔记本电脑上设置开发环境。 我最初在 Ubuntu 20.04 工作站上创建了环境,它运行良好。

它由以下容器组成;

  1. nginx (nginxinc/nginx-unprivileged:1.20.1-alpine)
  2. php (php:8.0.9-fpm-alpine3.14)
  3. Percona 数据库
  4. Redis 缓存
  5. 管理员

所有容器都驻留在同一个“应用程序网络”中,percona 和 redis 服务器具有专用卷。 一切正常,但 PHP 容器除外。 我尝试通过 Composer 在其上安装 Sulu CMS,但在安装过程中速度很慢。 我在安装过程中发现了一些错误;

    Failed to extract doctrine/annotations: (1) '/usr/bin/unzip' -qq '/var/www/html/tomtest/vendor/composer/tmp-6c0172a63ff2b134ca6392ad7ff111d1' -d '/var/www/html/tomtest/vendor/composer/77e4d756'

unzip: short read

但是安装完成并成功完成。 现在,当我尝试访问骨架管理仪表板时,加载登录屏幕大约需要 20 秒。 好像 PHP 容器在 Windows 11 上运行不正确,有人遇到过这种设置的问题吗?

更新(2021-12-28 19:30)通过一些测试,发现我目前使用的挂载似乎是问题所在。

当前 php 容器设置:

  php:
    build:
      context: ./
      target: dev
    container_name: ${PROJECT_NAME}_php
    volumes:
      - /mnt/c/Projects/sulu/docker/services/php/php.ini:/usr/local/etc/php/php.ini
      - /mnt/c/Projects/sulu/:/var/www/html
      - ~/.composer:/home/netbela/.composer
    environment:
      - PHP_IDE_CONFIG=serverName=${PROJECT_NAME}
    networks:
      - app-network
    env_file:
      - .env
    ports:
      - 9000:9000

定时执行作曲家创建项目:

/var/www/html $ time composer create-project sulu/skeleton testproject -n
real    7m 40.33s
user    2m 13.54s
sys     4m 41.40s

决定创建另一个没有本地目录但具有 docker 卷的 docker 实例,并为完全相同的命令计时。

  php2:
    build:
      context: ./
      target: dev
    container_name: ${PROJECT_NAME}_php2
    volumes:
      - php2-data:/var/www/html
    environment:
      - PHP_IDE_CONFIG=serverName=${PROJECT_NAME}
    networks:
      - app-network
    env_file:
      - .env
    ports:
      - 9001:9001

volumes:
  php2-data:
    name: php2-data

测试 output:

real    0m 12.83s
user    0m 10.71s
sys     0m 2.81s

结论; 它与正在挂载的本地目录有关。 现在要弄清楚如何解决此问题,以便我仍然可以使用 GIT 并在使用 docker 卷的同时从 Windows 桌面编辑我的代码。

我创建了一个指向 WSL 文件系统的 docker 卷。

docker volume create --driver local -o o=bind -o type=none -o device="\\wsl$\Ubuntu-20.04\home\user\sulu" php

然后我将此 docker 卷安装到容器上并添加了external: true标志

  php:
    build:
      context: ./
      target: dev
    container_name: ${PROJECT_NAME}_php
    volumes:
      - php:/var/www/html
      - ~/.composer:/home/user/.composer
    environment:
      - PHP_IDE_CONFIG=serverName=${PROJECT_NAME}
    networks:
      - app-network
    env_file:
      - .env
    ports:
      - 9000:9000

volumes:
  php:
    name: php
    external: true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM