#docker #phpstorm #windows-subsystem-for-linux
#docker #phpstorm #windows-subsystem-for-linux
Вопрос:
Моя текущая настройка: PhpStorm, Docker WSL, Ubuntu (WSL). Все мои файлы проекта являются локальными и находятся внутри WSL Ubuntu. Контейнер Docker и интерпретаторы CLI настроены на PhpStorm.
Кажется, он распознает PHP внутри моего контейнера «php-fpm» (он извлекает информацию о PHP). Когда я запускаю тест PHPUnit, похоже, что он подключается к моему контейнеру.
Если я правильно понимаю, PhpStorm монтирует файлы моего проекта из WSL Ubuntu в новый контейнер, который использует контейнер Docker ‘php-fpm’ для запуска модульных тестов? Но, похоже, он не монтирует файлы моего проекта внутри контейнера модульного тестирования. Я получаю следующую ошибку:
Testing started at 11:54 AM ...
[docker://laradock/php-fpm:latest-7.3/]:php /opt/.phpstorm_helpers/phpunit.php --no-configuration --filter Tests\Feature\ExampleTest --test-suffix ExampleTest.php /opt/project/tests/Feature
The value of autoloader is specified, but file doesn't exist '/opt/project/vendor/autoload.php'
Process finished with exit code 1
Когда я вручную запускаю контейнер Docker (через Docker Desktop), созданный PhpStorm, и попадаю в bash, в нем нет файлов, /opt/project
но есть /opt/.phpstorm_helpers/phpunit.php
. В этом и заключается проблема. Фактические файлы проекта, которые мой Docker смонтировал из WSL, находятся внутри /var/www
. Я попытался изменить сопоставления путей, чтобы указать на эти файлы, но все равно получаю ту же ошибку.
Любые предложения приветствуются.
Комментарии:
1. К вашему сведению: ваше первое и второе изображение выглядят одинаково…
2. В настоящее время это не поддерживается, мы не используем сопоставления путей между локальной машиной и WSL, поэтому файлы просто не попадают в контейнер. См . youtrack.jetbrains.com/issue/IDEA-242051 и связанные с этим
3. Спасибо за обновление @EugeneMorozov. Я разочарован этой новостью, но с нетерпением жду, что это будет поддержано. Похоже, это хорошая среда разработки.
Ответ №1:
Я тоже боролся с этим, но у меня есть обходной путь. Мне это было нужно в основном для разработки пакетов.
У меня есть предварительно созданный пользовательский образ docker на основе официального образа PHP CLI с различными модулями, которые мне нужны для большей части моей разработки.
Создайте docker-compose.yml
файл только с помощью службы PHP, например, мой:
version: "3.7"
services:
php:
container_name: pkg
image: my.private.registry/php7-cli:7.4.10
volumes:
- ./:/opt/project
entrypoint: /bin/bash
tty: true
Запустите это в WSL с docker-compose up -d
Затем при выборе удаленного интерпретатора CLI выберите Docker Compose
и выберите свою службу:
Выберите подключение к существующему контейнеру:
В тестовых фреймворках выберите удаленный интерпретатор, который мы только что настроили, и появится PHPUnit:
Запустите тесты и улыбнитесь =)
Хакерский метод, особенно при создании подобных пакетов, когда вам не нужна служба, работающая так, как с сайтом, но пока, по крайней мере, ее можно использовать, и вы получаете преимущества производительности WSL2, а не серверных систем hyper-v.
Ответ №2:
Согласно ветке комментариев, среда тестирования Docker WSL PHPUnit Phpstorm в настоящее время не поддерживается.
Ответ №3:
Я нашел обходной путь.
Я только что поместил .phar
файлы выполнения в /usr/local/bin/
каталог. Что я имею в виду. Я только что изменил свой Dockerfile
и добавил туда
RUN curl -L https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs
amp;amp; chmod x /usr/local/bin/phpcs
amp;amp; curl -L https://phar.phpunit.de/phpunit-9.5.phar > /usr/local/bin/phpunit
amp;amp; chmod x /usr/local/bin/phpunit
amp;amp; curl -L https://phpmd.org/static/latest/phpmd.phar > /usr/local/bin/phpmd
amp;amp; chmod x /usr/local/bin/phpmd
Он загружает и перемещает файлы .phar точно в /usr/local/bin/
каталог. Это означает, что он может быть вызван в любом месте контейнера docker.
Тогда вы можете просто скопировать мою конфигурацию по скриншотам. Убедитесь, что пути совпадают.
- Настройки PHP fpm
- Настройки модуля PHP
Соответственно, это также работает для phpc, phpmd и т. Д. Прямо сейчас вы можете просто вызывать файлы выполнения без косых черт