到目前为止,我还没有成功地让它发挥作用。设置本地计算机 - Windows 10,安装了 Cygwin、git bash 和 WSL2,安装了 Ubuntu;和 MacBook Air (Mojave)主机 - 运行 Amazon Linux 2Docker 容器的 AWS EC2 实例 - CentOS 7.8 运行带有 Xdebug 的 PHP目标利用从本地计算机到容器的反向隧道,从本地计算机远程调试容器中的 PHP 代码。当 PHP 代码本地安装在主机上时,我已经得到了这个工作,所以问题不在于 Xdebug。一旦我将 PHP 代码移至容器中,调试就不再起作用。我尝试过设置从本地计算机到主机 EC2 实例的反向隧道是有效的。为此,我ssh -vvv -i "aws.pem" -R 9000:localhost:9000 user@ec2instance在终端、cygwin 或 git bash 中进行操作,并nc -z localhost 9000 || echo 'no tunnel open'在主机上进行测试。当我docker exec -it container bash进入容器并运行 nc 时,隧道不可用。我正在使用 docker-compose:version: '2'services: web: image: 'privateregistry/project/container:latest' restart: always container_name: web ports: - '8082:80' - '447:443' - '9000:9000' volumes: - '.:/var/www/project'我尝试过映射 9000 端口和不映射 9000 端口。我尝试过 ssh 隧道的变体:ssh -vvv -i "aws.pem" -R :9000:localhost:9000 user@ec2instancessh -vvv -i "aws.pem" -R 0.0.0.0:9000:localhost:9000 user@ec2instancessh -vvv -i "aws.pem" -R \*:9000:localhost:9000 user@ec2instancessh -vvv -i "aws.pem" -R 9000:172.20.0.2:9000 user@ec2instance(容器IP)我也尝试过使用ssh -L但没有运气。有几篇文章(例如这篇文章)GatewayPorts yes建议在主机上添加。我也尝试过这个,没有任何改变。我没有尝试使用--network=host,主要是出于安全考虑。我也不想使用 ngrok,因为我希望能够使用 localhost 或host.docker.internal进行xdebug.remote_host设置。为了完整起见,以下是我对 Xdebug 的了解:[XDebug]xdebug.remote_enable=1xdebug.remote_autostart=1xdebug.remote_handler="dbgp"xdebug.remote_port=9000xdebug.remote_host="host.docker.internal";xdebug.remote_connect_back=1xdebug.idekey = VSCODExdebug.remote_log = "/var/log/xdebug.log"
1 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
我得到了这个工作。在阅读了 ssh 手册页并再次查看之后,我意识到我绑定到了 docker 容器 IP,而不是桥接器 (docker0) IP。
我将连接命令更新为ssh -vvv -i "aws.pem" -R 9000:172.17.0.1:9000 user@ec2instance
正确的 IP,隧道开始工作。我仍然启用了 GatewayPorts(根据手册页)并删除了 9000:9000 映射。
然后我将 xdebug.remote_host 值更新为相同的 IP,并且调试现在可以正常工作。不知道为什么 host.docker.internal 不起作用,但那是另一天的事了。
- 1 回答
- 0 关注
- 129 浏览
添加回答
举报
0/150
提交
取消