在 PhpStorm 中通过 Docker 容器使用 xdebug
Using xdebug through Docker container in PhpStorm
我已经阅读了一些关于此的帖子,但 none 对我的情况有所帮助,或者只是忽略了缺失的部分。
我无法使用 Docker 容器让 xdebug 在 PhpStorm 上工作。
Docker-compose.yml
version: '2'
services:
web:
image: nginx:latest
volumes:
- .:/usr/share/nginx/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/logs/nginx
- ./nginx/site-enabled/default.conf:/etc/nginx/sites-enabled/default.conf
ports:
- "80:80"
depends_on:
- php
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: local_db
MYSQL_USER: root
MYSQL_PASSWORD: 1234
ports:
- "3306:3306"
php:
build: images/php
volumes:
- .:/usr/share/nginx/html
- ./config/docker/php/php.ini:/usr/local/etc/php/php.ini
- ./config/docker/php/ext-xdebug.ini:/usr/local/etc/php/conf.d/ext-xdebug.ini
- ./config/docker/php/php-fpm.conf:/usr/local/etc/php-fpm.conf
user: www-data
depends_on:
- db
config/docker/php/ext-xdebug.ini
zend_extension="/usr/lib/php7/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.overload_var_dump=1
xdebug.default_enable=1
xdebug.remote_autostart=1
xdebug.idekey=PHPSTORM
xdebug.remote_connect_back=1
xdebug.remote_host=172.20.0.1 # ip of host inside docker container
xdebug.remote_log=/usr/share/nginx/html/xdebug.log
来自 xdebug.log
的错误
Log opened at 2017-05-31 11:01:14
I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 172.20.0.1:9000.
W: Creating socket for '172.20.0.1:9000', poll success, but error: Operation now in progress (29).
E: Could not connect to client. :-(
Log closed at 2017-05-31 11:01:14
在 PhpStorm 中,我使用具有以下设置的远程调试器:
服务器
Host - 127.0.0.1
Port - 80
服务器上的绝对路径
/usr/share/nginx/html
IDE 会话密钥
PHPSTORM
好的,我在这里找到了解决方案
https://forums.docker.com/t/ip-address-for-xdebug/10460/9
我必须将我的内部 IP 设置为 xdebug.remote_host
并禁用 xdebug.remote_connect_back=0
这似乎是 osx 的事情。
希望这对这里的人有帮助
我发现 ext-xdebug.ini
上的以下配置适用于 Docker 和 Mac
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
Docker 自动在容器内定义 host.docker.internal
。所以我们简单地指向 xdebug 认为 host.docker.internal
是主机的 IP(显然是)。这样,我们就不必依赖 docker 容器和主机之间不断变化的内部 IP。
可以在此处找到更多信息https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds
我已经阅读了一些关于此的帖子,但 none 对我的情况有所帮助,或者只是忽略了缺失的部分。
我无法使用 Docker 容器让 xdebug 在 PhpStorm 上工作。
Docker-compose.yml
version: '2'
services:
web:
image: nginx:latest
volumes:
- .:/usr/share/nginx/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/logs/nginx
- ./nginx/site-enabled/default.conf:/etc/nginx/sites-enabled/default.conf
ports:
- "80:80"
depends_on:
- php
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: local_db
MYSQL_USER: root
MYSQL_PASSWORD: 1234
ports:
- "3306:3306"
php:
build: images/php
volumes:
- .:/usr/share/nginx/html
- ./config/docker/php/php.ini:/usr/local/etc/php/php.ini
- ./config/docker/php/ext-xdebug.ini:/usr/local/etc/php/conf.d/ext-xdebug.ini
- ./config/docker/php/php-fpm.conf:/usr/local/etc/php-fpm.conf
user: www-data
depends_on:
- db
config/docker/php/ext-xdebug.ini
zend_extension="/usr/lib/php7/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.overload_var_dump=1
xdebug.default_enable=1
xdebug.remote_autostart=1
xdebug.idekey=PHPSTORM
xdebug.remote_connect_back=1
xdebug.remote_host=172.20.0.1 # ip of host inside docker container
xdebug.remote_log=/usr/share/nginx/html/xdebug.log
来自 xdebug.log
的错误Log opened at 2017-05-31 11:01:14
I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 172.20.0.1:9000.
W: Creating socket for '172.20.0.1:9000', poll success, but error: Operation now in progress (29).
E: Could not connect to client. :-(
Log closed at 2017-05-31 11:01:14
在 PhpStorm 中,我使用具有以下设置的远程调试器:
服务器
Host - 127.0.0.1
Port - 80
服务器上的绝对路径
/usr/share/nginx/html
IDE 会话密钥
PHPSTORM
好的,我在这里找到了解决方案
https://forums.docker.com/t/ip-address-for-xdebug/10460/9
我必须将我的内部 IP 设置为 xdebug.remote_host
并禁用 xdebug.remote_connect_back=0
这似乎是 osx 的事情。 希望这对这里的人有帮助
我发现 ext-xdebug.ini
上的以下配置适用于 Docker 和 Mac
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
Docker 自动在容器内定义 host.docker.internal
。所以我们简单地指向 xdebug 认为 host.docker.internal
是主机的 IP(显然是)。这样,我们就不必依赖 docker 容器和主机之间不断变化的内部 IP。
可以在此处找到更多信息https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds