【问题标题】:Why is my php docker container so slow on Windows 11?为什么我的 php docker 容器在 Windows 11 上这么慢?
【发布时间】:2022-01-27 07:35:12
【问题描述】:

我正在尝试在我的 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

测试输出:

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

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

【问题讨论】:

  • 我听说过有关 Docker 在 MS Windows 上的速度的抱怨,但这并不是一个真正适合 SO 的编程问题。在任何情况下,即使是错误单,也需要提供性能指标,即您作为测试运行的一些实际代码。顺便说一句:您确实检查了错误票,对吗?
  • Docker 就像一个模拟器;在 Windows 上,它实际上是一个模拟器(必须模拟 Linux,而且速度很慢,我们无能为力)。考虑找原因,问如何优化。
  • 感谢 cmets,我自己进行了一些测试,得出的结论是我使用的本地目录挂载不正确。我用这些信息更新了我的问题。

标签: php windows docker performance containers


【解决方案1】:

我创建了一个指向 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-14
    • 2010-10-29
    • 2010-11-12
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    相关资源
    最近更新 更多