准备环境

  • 带有PowerShellWindows操作系统,测试环境为Windows 10,其他版本没有测试过。
  • Windows上安装有Docker
  • docker-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

设置共享到DockerVolume卷名称,应当注意避免和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项目文件夹的内容

八种NetBeansXdebugnginxPHP-fpmPHP路由的排列组合配置

NetBeans Xdebugnginx PHP-fpmPHP路由命令
不需要不需要不需要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通过访问网站启动XdebugXdebug可以藉此发现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;}''')

启动带有XDebugPHP控制台程序的命令

docker-compose -f docker-compose.php.console.xdebug.yml up

两种PHP for DotNet配置

启动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

方案特点

  1. 本例的方案中NetBeans所调试的代码借助Windows共享文件夹共享到Docker中,因此运行环境和开发环境是相同的文件,便于即时修改,即时调试。
  2. 本例中共12种配置都是基于一套PHP代码,可以按需自由切换配置,例如运行时使用不包含Xdebug的配置,而调试时只需要切换启动命令即可。

注意

  • 按需调整Windows上的防火墙配置,保证共享文件夹访问,保证NetBeans可以启动监听端口,默认为9000

  • NetBeans启动调试后,有时候可能不能正确绑定Windows的监听端口,此时可以使用如下命令查询:

    netstat -ano | Select-String -Pattern '9000'

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐