使用Xdebug,Docker for Windows和PhpStorm让我感到有点困惑......
我在使用PHP的容器中配置了Xdebug。以下是我在这个容器中的php.ini中出现的内容:
xdebug.remote_enable=on
xdebug.remote_autostart=off
xdebug.idekey=PHPSTORM
xdebug.remote_port=9000
xdebug.remote_host=10.0.75.1
# xdebug.remote_connect_back=1
Docker看到的我的Windows IP似乎是10.0.75.1(当从Windows访问时,PHP显示10.0.75.1 for $ _SERVER ['REMOTE_ADDR'])。它也是DockerNAT虚拟设备IP。
PHPStorm(在Windows上)正在端口9000上侦听Xdebug。 我已为此容器绑定端口9000到9000:
web:
build: php5
ports:
- "80:80"
- "9000:9000"
Windows防火墙已关闭。仍然,PHPStorm没有从这个容器获得任何传入连接。
因此我试图从不同的地方远程登陆:
当我从Windows telnet 10.0.75.1 9000时,它在PHPStorm正在侦听时成功连接,并在没有侦听时返回此错误:“无法打开与端口9000上的主机的连接:连接失败”。这很有道理
当我从本地网络上的另一台计算机上尝试时,telnet 192.168.1.4 9000工作正常
但是从我的Docker的Web容器中,即使我可以成功ping 10.0.75.1并在端口80上telnet此IP(它连接),在端口9000上它会返回错误,无论PHPStorm是否正在侦听:
root@fd60276df273:/var/www/html# telnet 10.0.75.1 9000
Trying 10.0.75.1...
telnet: Unable to connect to remote host: Connection timed out
我试图将Xdebug端口更改为一些随机的其他数字并且它不会改变任何内容......
你知道什么可能导致这个问题吗?
答案 0 :(得分:1)
我终于开始工作了!关键是将network_mode设置为主机:
https://docs.docker.com/compose/compose-file/
docker-compose.yml:
version: '2'
services:
web:
build: php5
ports:
- "80:80"
#links:
# - db:db
network_mode: "host"
db:
image: mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=root
尝试这个后我注意到我的容器有一个IPed 192.168.65.2的接口 所以我telneted 192.168.65.1 9000,它工作!
php.ini:
xdebug.idekey=PHPSTORM
xdebug.remote_port=9000
xdebug.remote_host=192.168.65.1
我已选择"在localhost"上展示容器端口(新选项)在泊坞窗设置中 由于指定的network_mode,我无法再使用链接。所以我打开了端口3306,我必须选择192.168.65.1作为mysql主机。我可能会找到一些解决方法,但最后它会起作用!
答案 1 :(得分:0)
您可以使用docker定义的标准主机名来代替IP地址:
xdebug.remote_host=host.docker.internal
这将防止跨平台(mac / win)问题。