PowerShell的Windows操作系统,测试环境为Windows 10,其他版本没有测试过。Windows上安装有Dockerdocker-machine命令能找到一台运行中的Docker主机Docker主机不限于Windows上的虚拟机中安装,但是应当处于相同子网中。Windows上安装有NetBeans启动PowerShell进入一个文件夹
下载项目代码
git clone https://github.com/huzhenghui/Netbeans-Xdebug-PHP-fpm-in-Docker-by-Windows-share-folder.git
进入项目文件夹
cd Netbeans-Xdebug-PHP-fpm-in-Docker-by-Windows-share-folder
更新子模块代码
git submodule update --init
设置共享到Docker的Volume卷名称,应当注意避免和Docker上已有的卷名冲突
$env:VOLUME_NAME="Netbeans-Xdebug-PHP-fpm-in-Docker-by-Windows-share-folder"
使用脚本把Windows文件夹共享到Docker,脚本具体执行过程详见源代码。
.\share-windows-folder-to-docker\share-windows-folder-to-docker.ps1 -workingDir . -volumeName ${env:VOLUME_NAME}
测试共享效果
docker run --rm -v ${env:VOLUME_NAME}:/share alpine ls /share
共享成功将能看到Windows项目文件夹的内容
NetBeans、Xdebug、nginx、PHP-fpm、PHP路由的排列组合配置| NetBeans Xdebug | nginx PHP-fpm | PHP路由 | 命令 |
|---|---|---|---|
| 不需要 | 不需要 | 不需要 | docker-compose-f docker-compose.php.yml up |
| 不需要 | 不需要 | 需要 | docker-compose-f docker-compose.php.route.yml up |
| 不需要 | 需要 | 不需要 | docker-compose-f docker-compose.nginx.php-fpm.yml up |
| 不需要 | 需要 | 需要 | docker-compose -f docker-compose.nginx.php-fpm.route.yml up |
| 需要 | 不需要 | 不需要 | docker-compose-f docker-compose.php.xdebug.yml up |
| 需要 | 不需要 | 需要 | docker-compose -f docker-compose.php.xdebug.route.yml up |
| 需要 | 需要 | 不需要 | docker-compose -f docker-compose.nginx.php-fpm.xdebug.yml up |
| 需要 | 需要 | 需要 | docker-compose -f docker-compose.nginx.php-fpm.xdebug.route.yml up |
PHP控制台配置启动PHP控制台程序的命令
docker-compose -f docker-compose.php.console.yml up
使用NetBeans通过Xdebug调试PHP控制台程序和调试网站不同,调试网站可以使用xdebug.remote_connect_back配置,由NetBeans通过访问网站启动Xdebug,Xdebug可以藉此发现NetBeans监听的IP地址,而PHP控制台程序没有这样的过程,因此需要先获知NetBeans所在的电脑上和Xdebug通讯的IP地址,本例中使用脚本获取。
$env:REMOTE_HOST=$(docker-machine ssh $env:DOCKER_MACHINE_NAME 'tty=$(tty | cut -c 6-); w -i | grep $tty | awk ''{print $3;}''')
启动带有XDebug的PHP控制台程序的命令
docker-compose -f docker-compose.php.console.xdebug.yml up
启动PHP for DotNet控制台的命令
docker-compose -f docker-compose.php.net.console.yml up
启动PHP for DotNet网站的命令
docker-compose -f docker-compose.php.net.web.yml up
NetBeans所调试的代码借助Windows共享文件夹共享到Docker中,因此运行环境和开发环境是相同的文件,便于即时修改,即时调试。PHP代码,可以按需自由切换配置,例如运行时使用不包含Xdebug的配置,而调试时只需要切换启动命令即可。按需调整Windows上的防火墙配置,保证共享文件夹访问,保证NetBeans可以启动监听端口,默认为9000。
NetBeans启动调试后,有时候可能不能正确绑定Windows的监听端口,此时可以使用如下命令查询:
netstat -ano | Select-String -Pattern '9000'