Docker - Xdebug 调试 PHP CLI 脚本(VS 代码)
Docker - Xdebug debug PHP CLI script (VS Code)
这个问题是关于让 Xdebug 与托管在网络服务器 Docker 实例.
中的 CLI PHP 脚本一起工作的问题
我有 docker 个容器:web-server
、varnish-cache
、nginx-proxy
。
我能够使用此 VS 代码启动配置通过浏览器成功调试 Magento 2 网页:
这是新的 XDebug v3,删除了很多 v2 配置设置
客户端(Windows 10)IP(我的笔记本电脑):192.168.1.150,主机(Ubuntu 20.04)IP:192.168.1.105,托管使用 Docker 个容器 IP:172.100.0.2-5
VS 代码启动:
"name": "(Magento 2) Listen for XDebug on 192.168.1.5/105",
"type": "php",
"request": "launch",
"port": 9099,
"stopOnEntry": false, // Set to true to test any script on entry
"log": false,
// Remember to update remote_connect_back or remote_host
// inside xdebug PHP configuration.
// When using CLI debugging - rather use remote_host,
// because remote_connect_back = 1 does not work with CLI
// Server -> Local
"pathMappings": {
"/var/www/html/": "${workspaceRoot}",
},
"xdebugSettings": {
"max_children": 10000,
"max_data": 10000,
"show_hidden": 1
}
},
X调试配置(PHP 7.3)
zend_extension=xdebug.so
xdebug.log=/var/log/apache2/xdebug.log
xdebug.idekey=VSCODE
xdebug.client_port=9099
xdebug.client_discovery_header=HTTP_X_REAL_IP
xdebug.discover_client_host=On
; fallback for CLI - use client_host
xdebug.client_host=172.100.0.2
xdebug.start_with_request=yes
xdebug.mode=debug
Docker网络:
docker inspect network magento2-network-frontend:
"Containers": {
"6538a93fbe811fbbd9646d4ce089e1b686b508862ed86f6afaac1b600043a1e5": {
"Name": "redis-cache-magento2.3.5",
"EndpointID": "d27bfbff61765cf2b840e98d43ec7a378e182baa7007dabde4bab5a41734fa2a",
"MacAddress": "02:42:ac:64:00:05",
"IPv4Address": "172.100.0.5/16",
"IPv6Address": ""
},
"7c7ba745db17d6d6a100901ed1e3fe38a3d26a97e086edc155254a7d41033bcf": {
"Name": "web-server-apache2-magento2-3-5",
"EndpointID": "9b81f6b7ff2292eba6fb68af209f1d5c958bea3ee0d505512862f225ed8e57be",
"MacAddress": "02:42:ac:64:00:02",
"IPv4Address": "172.100.0.2/16",
"IPv6Address": ""
},
"7f208ecce2aafdf182e4616ef2e8b043f3b8245018c299aae06c1acf4fc0d029": {
"Name": "varnish-cache-magento2-3-5",
"EndpointID": "e1c4e3f9e792b7dfd2cebfbb906bd237795820639a80ab8f530f0c8418257611",
"MacAddress": "02:42:ac:64:00:03",
"IPv4Address": "172.100.0.3/16",
"IPv6Address": ""
},
"dc599fa93b09650b70f8f95333caecc8f9db18cd19b17be57d84196e91f54c2a": {
"Name": "nginx-proxy-magento2-3-5",
"EndpointID": "7b8396af676d9af51b098d09f20d9e73ef83f4b085cb5f7195ea234aae7ed91d",
"MacAddress": "02:42:ac:64:00:04",
"IPv4Address": "172.100.0.4/16",
"IPv6Address": ""
}
CLI 命令:_可以看出它是来自 在托管 Apache2 Web 服务器 Docker 容器 中的 Magento 2 bin/magento migrate:data
命令。 (上面显示的IP是:172.100.0.2
)
rm var/migration* && bin/magento migrate:data /var/www/html/app/code/ModuleOverrides/Magento_DataMigrationTool/etc/opensource-to-opensource/1.7.0.2/config.localboth.host_restoredb.xml
我的 VS 代码在 Windows 10 客户端(IP 192.168.1.150)上没有调试断点,因为我从容器 172.100.0.2
.
中调用脚本
日志文件 /var/log/apache2/xdebug.log
证实了这一行:
Could not connect to debugging client. Tried: 172.100.0.2:9099 (fallback through xdebug.client_host/xdebug.client_port) :-(
所以,由于我不知道如何从 Windows 10 个客户端并且只能从 Docker 容器中 运行 一个 CLI 脚本,所以我可以 how/what获取此 CLI 脚本以连接到 Xdebug?
附加信息(如果需要)
Magento 2 具有 CLI 功能 bin/magento [command]
- 我正在尝试调试的命令是 data-migration-tool
的一部分,它无法正确导入属性。 在 github 存储库中没有人针对此特定问题提供 100% 有效的解决方案 - 所以我想尝试更深入地挖掘以尝试找到解决方案。此外,该工具只是一个 CLI 工具,没有 web-ui 选项。
您需要将 Xdebug 的 xdebug.client_host
设置为您的 IDE 的 IP 地址,您指定的是 192.168.1.150
。
您还需要关闭 xdebug.discover_client_host
,因为那样会尝试使用内部 Docker 网络 IP (172.100.0.2
),这不是您的 IDE 正在收听。
记住:Xdebug 与 IDE 建立连接,而不是相反。
这个问题是关于让 Xdebug 与托管在网络服务器 Docker 实例.
中的 CLI PHP 脚本一起工作的问题我有 docker 个容器:web-server
、varnish-cache
、nginx-proxy
。
我能够使用此 VS 代码启动配置通过浏览器成功调试 Magento 2 网页:
这是新的 XDebug v3,删除了很多 v2 配置设置
客户端(Windows 10)IP(我的笔记本电脑):192.168.1.150,主机(Ubuntu 20.04)IP:192.168.1.105,托管使用 Docker 个容器 IP:172.100.0.2-5
VS 代码启动:
"name": "(Magento 2) Listen for XDebug on 192.168.1.5/105",
"type": "php",
"request": "launch",
"port": 9099,
"stopOnEntry": false, // Set to true to test any script on entry
"log": false,
// Remember to update remote_connect_back or remote_host
// inside xdebug PHP configuration.
// When using CLI debugging - rather use remote_host,
// because remote_connect_back = 1 does not work with CLI
// Server -> Local
"pathMappings": {
"/var/www/html/": "${workspaceRoot}",
},
"xdebugSettings": {
"max_children": 10000,
"max_data": 10000,
"show_hidden": 1
}
},
X调试配置(PHP 7.3)
zend_extension=xdebug.so
xdebug.log=/var/log/apache2/xdebug.log
xdebug.idekey=VSCODE
xdebug.client_port=9099
xdebug.client_discovery_header=HTTP_X_REAL_IP
xdebug.discover_client_host=On
; fallback for CLI - use client_host
xdebug.client_host=172.100.0.2
xdebug.start_with_request=yes
xdebug.mode=debug
Docker网络:
docker inspect network magento2-network-frontend:
"Containers": {
"6538a93fbe811fbbd9646d4ce089e1b686b508862ed86f6afaac1b600043a1e5": {
"Name": "redis-cache-magento2.3.5",
"EndpointID": "d27bfbff61765cf2b840e98d43ec7a378e182baa7007dabde4bab5a41734fa2a",
"MacAddress": "02:42:ac:64:00:05",
"IPv4Address": "172.100.0.5/16",
"IPv6Address": ""
},
"7c7ba745db17d6d6a100901ed1e3fe38a3d26a97e086edc155254a7d41033bcf": {
"Name": "web-server-apache2-magento2-3-5",
"EndpointID": "9b81f6b7ff2292eba6fb68af209f1d5c958bea3ee0d505512862f225ed8e57be",
"MacAddress": "02:42:ac:64:00:02",
"IPv4Address": "172.100.0.2/16",
"IPv6Address": ""
},
"7f208ecce2aafdf182e4616ef2e8b043f3b8245018c299aae06c1acf4fc0d029": {
"Name": "varnish-cache-magento2-3-5",
"EndpointID": "e1c4e3f9e792b7dfd2cebfbb906bd237795820639a80ab8f530f0c8418257611",
"MacAddress": "02:42:ac:64:00:03",
"IPv4Address": "172.100.0.3/16",
"IPv6Address": ""
},
"dc599fa93b09650b70f8f95333caecc8f9db18cd19b17be57d84196e91f54c2a": {
"Name": "nginx-proxy-magento2-3-5",
"EndpointID": "7b8396af676d9af51b098d09f20d9e73ef83f4b085cb5f7195ea234aae7ed91d",
"MacAddress": "02:42:ac:64:00:04",
"IPv4Address": "172.100.0.4/16",
"IPv6Address": ""
}
CLI 命令:_可以看出它是来自 在托管 Apache2 Web 服务器 Docker 容器 中的 Magento 2 bin/magento migrate:data
命令。 (上面显示的IP是:172.100.0.2
)
rm var/migration* && bin/magento migrate:data /var/www/html/app/code/ModuleOverrides/Magento_DataMigrationTool/etc/opensource-to-opensource/1.7.0.2/config.localboth.host_restoredb.xml
我的 VS 代码在 Windows 10 客户端(IP 192.168.1.150)上没有调试断点,因为我从容器 172.100.0.2
.
日志文件 /var/log/apache2/xdebug.log
证实了这一行:
Could not connect to debugging client. Tried: 172.100.0.2:9099 (fallback through xdebug.client_host/xdebug.client_port) :-(
所以,由于我不知道如何从 Windows 10 个客户端并且只能从 Docker 容器中 运行 一个 CLI 脚本,所以我可以 how/what获取此 CLI 脚本以连接到 Xdebug?
附加信息(如果需要)
Magento 2 具有 CLI 功能 bin/magento [command]
- 我正在尝试调试的命令是 data-migration-tool
的一部分,它无法正确导入属性。 在 github 存储库中没有人针对此特定问题提供 100% 有效的解决方案 - 所以我想尝试更深入地挖掘以尝试找到解决方案。此外,该工具只是一个 CLI 工具,没有 web-ui 选项。
您需要将 Xdebug 的 xdebug.client_host
设置为您的 IDE 的 IP 地址,您指定的是 192.168.1.150
。
您还需要关闭 xdebug.discover_client_host
,因为那样会尝试使用内部 Docker 网络 IP (172.100.0.2
),这不是您的 IDE 正在收听。
记住:Xdebug 与 IDE 建立连接,而不是相反。