我正在尝试构建一个小型环境,以使用 Visual Studio Code 在 docker 中测试 PHP 调试。我的想法是创建一个模型,可以用于我们公司的多个 PHP 系统。但是,我无法调试或使用断点……就像 VSCode 与 Xdebug 断开连接一样。
这是我的 Dokerfile
FROM php:7.4-apache
RUN apt-get update && apt upgrade -y
RUN docker-php-ext-install pdo mysqli pdo_mysql \
&& docker-php-ext-enable mysqli
RUN pecl install xdebug-3.1.5 \
&& docker-php-ext-enable xdebug
ADD ./app /var/www/html
COPY ./app/test-form.conf /etc/apache2/sites-available/test-form.conf
# Copy php.ini
COPY ./php.ini /usr/local/etc/php
RUN echo 'SetEnv MYSQL_DB_CONNECTION ${MYSQL_DB_CONNECTION}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo 'SetEnv MYSQL_DB_NAME ${MYSQL_DB_NAME}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo 'SetEnv MYSQL_USER ${MYSQL_USER}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo 'SetEnv MYSQL_PASSWORD ${MYSQL_PASSWORD}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo 'SetEnv SITE_URL ${SITE_URL}' >> /etc/apache2/conf-enabled/environment.conf
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf &&\
a2enmod rewrite &&\
a2enmod headers &&\
a2enmod rewrite &&\
a2dissite 000-default &&\
a2ensite test-form &&\
service apache2 restart
这是我的 docker-compose.yml
version: "1"
services:
webserver:
image: form-test
ports:
- "80:80"
# - "443:443"
volumes:
- ./app:/var/www/html
extra_hosts:
- "host.docker.internal:host-gateway"
environment:
MYSQL_DB_CONNECTION: test
MYSQL_DB_NAME: test
MYSQL_USER: test
MYSQL_PASSWORD: test
SITE_URL: http://localhost
XDEBUG_MODE: develop,debug
XDEBUG_CONFIG:
client_host=host.docker.internal
start_with_request=yes
networks:
internal:
driver: bridge
这是我的xdebug_info.php
<?php
// xdebug_info();
phpinfo();
这是我的 php.ini
[xdebug]
zend_extension=xdebug
xdebug.mode=develop,debug
xdebug.start_with_request=yes
xdebug.remote_port=9003
xdebug.client_port=9003
xdebug.remote_host=host.docker.internal
这是我的launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen on Docker for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
},
"hostname": "0.0.0.0"
},
]
}
现在这很奇怪……似乎 Xdebug 已成功连接到 VSCode,因为当我启动我的
xdebug_info.php
时,它会显示以下消息:
当我开始在 VSCode 上监听时,消息消失了:
我还注意到 VS Code 中的蓝色底部栏没有像应有的那样变成橙色。在建立了我的环境后但无法使其正常工作。
Xdebug 似乎已经连接到 vscode 并启动调试会话。所以 zobo 的评论可能是对的:这只是一个路径映射问题。 事实上,在你的
docker-compose.yml
中你是绑定安装
volumes:
- ./app:/var/www/html
但是在你的
launch.json
配置中你有
"pathMappings": {
"/var/www/html": "${workspaceFolder}"
},
所以 - 假设
docker-compose.yml
位于根文件夹中,这也是 vscode 的工作区文件夹 - 你实际上需要映射
"pathMappings": {
"/var/www/html": "${workspaceFolder}/app"
},