如何使用docker for Windows(beta)

时间:2016-05-27 08:20:05

标签: docker phpstorm xdebug

使用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端口更改为一些随机的其他数字并且它不会改变任何内容......

你知道什么可能导致这个问题吗?

2 个答案:

答案 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)问题。