问题描述
我想做什么:
我正在尝试在 Laravel 8 上的 PHPStorm 2020.3 中运行/调试单元测试。ENV 是 Windows 10 上的 WSL 2。
问题
一:当我在 CLI 解释器中选择服务时,没有检测到 PHP 和 Xdebug。
两个:当我运行/调试单元测试时,出现不同的错误,其中之一:
[docker-compose://[\\wsl$\Ubuntu-20.04\home\musa\codes\boom\finance\docker-compose.yml]:laravel.test/]:PHP /opt/.PHPstorm_helpers/PHPunit.PHP --configuration /var/www/html/PHPunit.xml
Testing started at 8:31 PM ...
Version mismatch: file \\wsl$\Ubuntu-20.04\home\musa\codes\xyz\docker-compose.yml specifies version 3.9 but extension file C:\Users\musah\AppData\Local\JetBrains\PHPStorm2020.3\tmp\docker-compose.override.9.yml uses version 1
Process finished with exit code 1
详情:
docker-compose.yml
文件:
services:
laravel.test:
build:
context: ./docker/development
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP:-wwwdata}'
image: sail-8.0/app
ports:
- '${APP_PORT:-80}:80'
- '9003:9003'
environment:
WWWUSER: '${WWWUSER:-wwwdata}'
LaraVEL_SAIL: 1
volumes:
- '.:/var/www/html'
- './docker/development/xdebug.ini:/usr/local/etc/PHP/conf.d/PHP-ext-xdebug.ini'
- './docker/development/PHP.ini:/usr/local/etc/PHP/conf.d/99-sail.ini'
- './docker/development/http.conf:/etc/apache2/sites-available/000-default.conf'
- './docker/development/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf'
networks:
- sail
depends_on:
- MysqL
- redis
- selenium
MysqL:
image: MysqL:5.7.29
restart: unless-stopped
tty: true
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
volumes:
- ./docker/development/MysqL:/var/lib/MysqL
environment:
MysqL_ROOT_PASSWORD: '${DB_PASSWORD}'
MysqL_DATABASE: '${DB_DATABASE}'
MysqL_USER: '${DB_USERNAME}'
MysqL_PASSWORD: '${DB_PASSWORD}'
MysqL_ALLOW_EMPTY_PASSWORD: 'yes'
SERVICE_NAME: MysqL
networks:
- sail
healthcheck:
test: ["CMD","MysqLadmin","ping"]
redis:
image: 'redis:alpine'
ports:
- '${FORWARD_REdis_PORT:-6379}:6379'
volumes:
- 'sailredis:/data'
networks:
- sail
healthcheck:
test: ["CMD","redis-cli","ping"]
mailhog:
image: 'mailhog/mailhog:latest'
ports:
- '${FORWARD_MAILHOG_PORT:-1025}:1025'
- '${FORWARD_MAILHOG_DASHBOARD_PORT:-8025}:8025'
networks:
- sail
selenium:
image: 'selenium/standalone-chrome:latest'
volumes:
- '/dev/shm:/dev/shm'
networks:
- sail
localstack:
image: localstack/localstack:latest
environment:
- AWS_DEFAULT_REGION=us-east-1
- EDGE_PORT=4566
- SERVICES=lambda,s3
ports:
- '4566:4566'
volumes:
- "${TMPDIR:-/tmp/localstack}:/tmp/localstack"
- "/var/run/docker.sock:/var/run/docker.sock"
networks:
- sail
networks:
sail:
driver: bridge
volumes:
sailMysqL:
driver: local
sailredis:
driver: local
sailmeilisearch:
driver: local
docker/development/Dockerfile
文件:
FROM PHP:8.0-apache
ARG WWWGROUP
workdir /var/www/html
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update \
&& apt-get install -y curl zip unzip supervisor libcap2-bin libpng-dev python2 \
&& PHP -r "readfile('http://getcomposer.org/installer');" | PHP -- --install-dir=/usr/bin/ --filename=composer \
&& apt-get -y autoremove \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
RUN pecl install xdebug && docker-PHP-ext-enable xdebug
RUN setcap "cap_net_bind_service=+ep" /usr/local/bin/PHP
RUN groupadd --force -g $WWWGROUP sail
RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail
copY start-container /usr/local/bin/start-container
RUN chmod +x /usr/local/bin/start-container
EXPOSE 8000
EXPOSE 9003
ENTRYPOINT ["start-container"]
docker/development/PHP.ini
文件:
[PHP]
post_max_size = 100M
upload_max_filesize = 100M
variables_order = EGPCS
docker/development/xdebug.ini
文件:
[XDebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
xdebug.log = "/tmp/xdebug.log"
docker/development/supervisord.conf
文件:
[supervisord]
nodaemon=true
user=root
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
[program:PHP]
command=/usr/local/bin/PHP -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80
user=sail
environment=LaraVEL_SAIL="1"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
docker/development/start-container
文件:
#!/usr/bin/env bash
if [ ! -z "$WWWUSER" ]; then
usermod -u $WWWUSER sail
fi
if [ ! -d /.composer ]; then
mkdir /.composer
fi
chmod -R ugo+rw /.composer
if [ $# -gt 0 ];then
exec gosu $WWWUSER "$@"
else
/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
fi
解决方法
令我惊讶的是,通过将 version
文件中的 docker-compose.yml
指定为:
version: '3.9'
services:
laravel.test:
build:
context: ./docker/development
dockerfile: Dockerfile
args:
...