10

在我从Docker Machine切换到Docker Desktop for Mac后,xdebug 停止工作。9000使用 xdebug 的容器无法访问主机上的端口。
php.ini

xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_host=172.18.0.1
xdebug.idekey=PHPSTORM

码头工人-compose.yml

version: '2'
services:
  php:
    image: <image name>
    ports:
      - 80:80
    # - 9000:9000
    volumes:
      - .:/var/www/html
      - ./php.ini:/usr/local/etc/php/conf.d/php.ini

xdebug.log

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.18.0.1:9000.
E: Could not connect to client. :-(

Н如何解决我的问题?

4

4 回答 4

12

我也有同样的问题。这可能与 OSX 中 docker 的限制有关。请参阅这些链接。

https://docs.docker.com/docker-for-mac/networking/ https://forums.docker.com/t/explain-networking-known-limitations-explain-host/15205

还建议了可能的解决方法。其中之一是创建一个具有新 ip(例如 10.254.254.254)的设备,该设备会循环回您的 localhost。然后,当您将此 ip 用作远程主机地址而不是 docker 分配的地址(127.0.0.1 或 172.17.0.2)时,它应该可以解决问题。按照此链接 获取编码解决方案

于 2016-08-25T13:41:49.420 回答
1

将您的 docker-compose.yml 更改为以下内容。

您将要公开端口 9000,而不是绑定。还将您的 xdebug ini 更新为主机(mac)的 ip,而不是 docker 的 ip。

我还添加了如何将 xdebug 文件从 mac 直接挂载到 docker,以便您可以即时更新它。这使您可以进行更多控制,因为您可能必须根据从 wifi 到 wifi 的移动来更新您的 ip。xdebug.remote_host= ip 应该是你的 mac 本地网络 ip。只要记住您是否在 apache 上执行service apache2 restart或适当的命令以在您更改 ip 时重新启动服务器。

version: '2'
services:
  php:
    image: <image name>
    ports:
      - 80:80
    expose:
      - "9000"
    volumes:
      - .:/var/www/html
      - ./php.ini:/usr/local/etc/php/conf.d/php.inivolumes:
      - ./20-xdebug.ini:/etc/php/7.1/cli/conf.d/20-xdebug.ini //obviously you would change this to your correct paths
      - ./20-xdebug.ini:/etc/php/7.1/apache2/conf.d/20-xdebug.ini //obviously you would change this to your correct paths


# 20-xdebug.ini, this is how mine is setup. 
zend_extension = /usr/lib/php/20160303/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=192.168.0.4 // Make sure you use your host (mac) local ip, not the ip of docker. 
xdebug.remote_port=9000
xdebug.idekey = PHPSTORM
xdebug.remote_handler = dbgp
xdebug.remote_autostart = 1
xdebug.remote_log = /var/log/xdebug.log
于 2018-01-04T16:57:08.260 回答
0

我已经为此苦苦挣扎了一段时间,在阅读了https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support上的官方文档后,我找到了一个更简单的解决 方案这部分 :

我想从容器连接到主机上的服务

主机有一个不断变化的 IP 地址(如果您没有网络访问权限,则没有)。从 18.03 开始​​,我们的建议是连接到特殊的 DNS 名称 host.docker.internal,它解析为主机使用的内部 IP 地址。这是出于开发目的,不适用于 Docker for Mac 之外的生产环境。

一旦你理解了这一点,你就可以在容器内的 php.ini 中remote_host设置设置。host.docker.internal也不要忘记将xdebug.remote_connect_back主机设置设置为 0 不会被忽略:

xdebug.remote_port=9000
xdebug.idekey=PHPSTORM
xdebug.remote_log=/tmp/xdebug.log
xdebug.remote_host=host.docker.internal
xdebug.remote_enable=1
xdebug.remote_connect_back=0
于 2018-09-12T22:31:04.560 回答
0

我使用了这个设置并且它有效:)

xdebug.remote_port=9000
xdebug.idekey=PHPSTORM
xdebug.remote_host=host.docker.internal
xdebug.remote_enable=1
xdebug.remote_connect_back=0

在 vscode 中使用 launch.json

 "name": "Listen 9000",
 "type": "php",
 "request": "launch",
 "log": true,
 "externalConsole": false,
 "pathMappings": {
        "/var/www/html": "/Users/folder/project/src"
     },
  "port": 9000,

使用 docker-compose.yml:

在此处输入图像描述

于 2021-10-22T02:45:56.923 回答