所以,我的配置是:
FROM php:8.1-apache as php_base
COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr/local/bin/
RUN a2enmod rewrite && install-php-extensions pgsql
RUN echo 'ServerName localhost' >> /etc/apache2/apache2.conf && service apache2 restart
WORKDIR /var/www/lessor-calculator
FROM php_base as php_dev
RUN pecl install xdebug && docker-php-ext-enable xdebug
version: "3.4"
services:
app:
build:
context: docker/server
target: php_dev
networks:
my-network:
environment:
PHP_IDE_CONFIG: "serverName=MyApp"
ports:
- "${DOCKER_SERVER_PORT:-9180}:80"
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- ./:/var/www/lessor-calculator
- ./docker/server/apache/sites-enabled:/etc/apache2/sites-enabled
- ./docker/server/php/conf.d/xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
- ./docker/server/php/conf.d/xdebug.log:/var/log/xdebug.log
- ./docker/server/php/conf.d/error_reporting.ini:/usr/local/etc/php/conf.d/error_reporting.ini
xdebug_info()
输出:[17] Log opened at 2022-01-04 14:47:45.645181
[17] [Step Debug] INFO: Connecting to configured address/port: host.docker.internal:9003.
[17] [Step Debug] WARN: Creating socket for 'host.docker.internal:9003', poll success, but error: Operation now in progress (29).
[17] [Step Debug] ERR: Could not connect to debugging client. Tried: host.docker.internal:9003 (through xdebug.client_host/xdebug.client_port) :-(
[17] Log closed at 2022-01-04 14:47:45.649491
我还尝试使用另一个端口,
curl host.docker.internal:9000
,答案为“连接被拒绝”(但只需 ping host.docker.internal
就可以正常工作)。大家都说,不需要映射9000端口。
请任何建议,可能是什么原因。谢谢你。
更新:Xdebug 配置:
zend_extension=xdebug
[xdebug]
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
xdebug.log="/var/log/xdebug.log"
更新:9003端口的新配置,启用xdebug.log
更新2:我正在使用无根docker。我已经检查过这一切都在 rootfull 模式下工作。
为什么不使用例如暴露所需的端口。
EXPOSE 9003
在Dockerfile
?
xdebug
端口和 Dockerfile
端口需要匹配。
它对我的案例有用:
PHP 8.2.8 (cli) (建于: Jul 8 2023 07:10:21) (NTS) 版权所有 (c) PHP Group Zend Engine v4.2.8,版权所有 (c) Zend Technologies 使用 Zend OPcache v8.2.8,版权所有 (c),作者:Zend Technologies 使用 Xdebug v3.2.1,版权所有 (c) 2002-2023,作者:Derick Rethans
在 docker-compose.yaml 文件中,有 2 行需要重新配置,如下所示
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-debug}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=172.26.174.72}'
正如@LazyOne 所发现的那样, 如果我们使用 VSCode 远程连接到 WSL(源代码放入 WSL 中),则 client_host 将是 wsl 的 IP。如果 VSCode 直接打开工作区那么它必须是机器的 IP(Host Machine)。
补充:
要查找 IP,请在目标环境终端上运行 ifconfig、ipconfig 或类似的命令。
在 WSL 中运行
Sail php -m
检查 Docker 容器上是否安装了 xdebug。
如果没有运行
Sail artisan sail:publish
在源代码中创建一个docker文件夹。然后配置 DockerFile 进行 xdebug 安装
重新配置 docker-compose.yaml 后,运行
Sail stop
,然后运行 sail up --build
重新创建所有容器。
在launch.json中添加
pathMappings
:
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"externalConsole": false,
"ignore": [
"**/vendor/**/*.php"
],
"pathMappings": {
"/var/www/html": "/home/abcUser/laravelTut/firstApp/firstapp", // Map your WSL path to the container path
},
},