PHPSTORM中怎么调试Docker项目

PHPSTORM中怎么调试Docker项目

这篇文章给大家介绍中怎么调试项目,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

基本用法

首先要知道 最基本的两样东西:image和

image        镜像,搭建一个 环境最基本的就是 image。可以简单理解为这就是创建虚拟机的那个镜像。

 容器。即 依据 image,创建出来的虚拟环境。可以简单理解为就是运行着的虚拟机

的配置文件为 。该文件内容为构建 的命令。基本命令有:

FROM     设置 运行在哪个 image 上。必须写在 的开头。可以在 Hub里找适合的 image。

RUN        在 image build时执行命令。一般用于安装环境

CMD       在 刚启动时执行命令。一般用于启动服务

COPY      将宿主机的文件拷贝到 中

  设置工作目录。所有命令都会在这个目录的基础上进行工作

了解了上面的三个命令后,我们可以来简单写一个 了。

#基础 image 为 php:7.3-apache
FROM php:7.3-apache
#安装 xdebug 扩展 并开启
RUN pecl install xdebug && 
docker-php-ext-enable xdebug
#将 宿主机的 phpinfo.php 拷贝到 container /var/www/html/phpinfo.php 中
COPY ./phpinfo.php /var/www/html/phpinfo.php

写完后在 的目录里运行

docker build -t test/testmyphp .

等命令跑完,输入以下命令即可看到创建好的 image

$ docker image ls
REPOSITORY   TAG   IMAGE ID  ......
test/testmyphp   latest  4931b92274f2 ......

要想让 运行起来PHPSTORM中怎么调试Docker项目,使用如下命令。使用-p来指定映射端口,左边是宿舍机端口,右边是 端口

docker run -p 81:80 test/testmyphp

查看运行中的

$ docker container ls
CONTAINER ID        IMAGE           PORTS            ......
10b8c28b2f69        test/testmyphp     0.0.0.0:81->80/tcp   ......

进入 的 shell

$ docker exec -it CONTAINER_ID值 bash
root@10b8c28b2f69:/var/www/html#

至此,基本的 环境我们就建好了。接下来研究下如何让 调试 项目

调试方式一 – 挂载调试

这里做测试使用前文的 ,需要按照实际情况进行配置添加。

配置

#基础 image 为 php:7.3-apache
FROM php:7.3-apache
#安装 xdebug 扩展 并开启
RUN pecl install xdebug && 
docker-php-ext-enable xdebug
# !!! 使用一个启动脚本来启动服务 !!!
COPY ./start.sh /start.sh
RUN chmod +x /start.sh
CMD ["/start.sh"]

start.sh 内容

#配置 Xdebug
echo "xdebug.client_host = host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
echo "xdebug.client_port = 9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
echo "xdebug.mode = debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
echo "xdebug.max_nesting_level = 1000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
echo "xdebug.discover_client_host = true" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
#重启 apache ssh
service apache2 restart

重建 image:

#最好先删掉之前的再重建
docker image rm IMAGE值 -f
docker build -t test/testmyphp .

重建完先不急着跑 。先定位到我们的项目代码位置

使用 的 Bind 技术。将宿主机的项目目录映射到 的网站目录下

docker run -p 81:80 --mount type=bind,source=/home/xp/test_docker/test_program,target=/var/www/html test/testmyphp

至此,调试环境所需要的服务就安装好了,接下来配置 。

配置

直接使用Open打开项目

配置 目录映射

进入 File -> -> & -> PHP -> 。配置目录映射

注意一定要把 Use path 的勾勾上,才能配置目录映射

path on the 是要手动打上服务器路径的

设置端口

进入 File -> -> & -> PHP -> Debug。设置 Debug port 为 9003。和 php 配置一致。

配置一个 Run/Debug

点击 右上角的 Add ….。进入配置面phpstorm调试phpPHPSTORM中怎么调试Docker项目,新增一个 PHP Web Page。并进行如下简单的配置即可(改名字设url 路径)

启动 PHP Debug

直接点击 右上角的 小电话 ,即可开启监听

验证

在 php文件上打上断点,点击 右上角 甲壳虫样式的 Debug按钮。即可成功断点

调试方式二 – ssh 隧道

这种方式不仅仅可以用在 环境上,同样可以用在 远程服务器上。缺点就是要在 里头安装许多额外服务。

配置

安装ssh服务。 需要 ssh 来进行目录映射,不然无法成功 Debug

安装 。这是调试的基础扩展组件

设置 ssh 允许 root 登陆。毕竟只是个 调试环境,就不弄那么麻烦了。当然如果是线上业务啥的当然要做好权限分配。

修改 root密码。毕竟不知道密码也无法连接

启动 ssh 服务

重启 服务

这里做测试使用前文的 ,需要按照实际情况进行配置添加。

修改前文的 。

#基础 image 为 php:7.3-apache
FROM php:7.3-apache
ENV APACHE_DOCUMENT_ROOT /var/www/html
#安装 ssh 服务
RUN apt-get update && 
apt-get install ssh -y
#安装 xdebug 扩展 并开启
RUN pecl install xdebug && 
docker-php-ext-enable xdebug
#将宿主机的 phpinfo.php 拷贝到 container /var/www/html/phpinfo.php 中
COPY ./phpinfo.php /var/www/html/phpinfo.php
# !!! 使用一个启动脚本来完成流程 3 4 5 的工作 !!!
COPY ./start.sh /start.sh
RUN chmod +x /start.sh
CMD ["/start.sh"]

start.sh 内容

#!/bin/bash
#设置 ssh 允许 root 登录
echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config
#修改root密码
echo root:123456 | chpasswd
#配置 Xdebug。Xdebug 3 的配置如下,和 Xdebug 2不太一样
echo "xdebug.client_host = host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
echo "xdebug.client_port = 9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
echo "xdebug.mode = debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
echo "xdebug.max_nesting_level = 1000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
echo "xdebug.discover_client_host = true" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
#重启 apache ssh
service apache2 restart
service ssh restart
#要加上这个,不然 container 运行完就停止了。
sleep infinity

重建 image:

#最好先删掉之前的再重建
docker image rm IMAGE值 -f
docker build -t test/testmyphp .

启动 :

docker run -p 81:80 -p 2222:22 test/testmyphp

至此,调试环境所需要的服务就安装好了,接下来配置 。

配置

打开 ,新建一个 。选择 New from Files

选择 Web is on host。

一路 Next。走到配置

然后又是一路 Next 即可。

配置完成后,将能看到我们的项目。

此时是不能直接进行代码调试的。我们要做以下工作

配置 CLI

配置目录映射

设置端口

配置一个 Run/Debug

启动 PHP Debug

ps:由于有些步骤是一样的,就直接拉上文的截图过来了。

配置 CLI

进入 File -> -> & -> PHP。设置 CLI

新建一个 CLI 。选择 From , , VM, WSL,….

这里我们可以填 SSH,也可以直接选择 。我这里用的是 SSH

设置 PHP 路径。不知道可以进入 中使用 php进行搜索

配置 目录映射

进入 File -> -> & -> PHP -> 。配置目录映射

注意一定要把 Use path 的勾勾上phpstorm调试php,才能配置目录映射

path on the 是要手动打上服务器路径的

设置端口

进入 File -> -> & -> PHP -> Debug。设置 Debug port 为 9003。和 php 配置一致。

配置一个 Run/Debug

点击 右上角的 Add ….。进入配置面,新增一个 PHP Web Page。并进行如下简单的配置即可(改名字设url 路径)

启动 PHP Debug

直接点击 右上角的 小电话 ,即可开启监听

验证

在 php文件上打上断点,点击 右上角 甲壳虫样式的 Debug按钮。即可成功断点

扩展 – 远程服务器调试

这里可以扩展以一下,如果调试目标是远程服务器而不是本地 ,该如何配置?

其实和上面的步骤一样的,只是 监听的流量我们要做修改下。

简单说说 监听的原理:

当 php- 接收到带有 的请求时,将会把当前的 Debug信 息发送给 中配置的 和 。

在我们的 start.sh 启动文件中,设置如下:

xdebug.client_host = host.docker.internal
xdebug.client_port = 9003

host..值在 中是自动将请求端的 ip 设置为 调试端,即自动将 Debug信息 发送给任何请求IP。

而.的值是 Debug信息 被发送至的端口。

我们可以想下phpstorm调试php,在本地,端是能访问到到我们请求端的 ip 和 端口 的,因为都是同一局域网。

但若调试的是远程服务器,由于公网和内网的原因,公网服务器是无法发送 Debug信息 调试端的(除非调试端也在公网上。。)

所以我们需要将.设置为127.0.0.1,让 转发 Debug信息 到本地的 9003 端口中。

接着使用 ssh 隧道进行端口转发,把调试端监听的 9003 端口映射到 服务端的 9003 上。这样就能接收到 转发的 Debug信息了。这一点使用 ssh 隧道是可以做到的。

我们来测试下,首先修改 php.ini。让.值为127.0.0.1

公告:
1. 本站所有资源来源于用户上传和网络,如有侵权请联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系站长处理!
6. 本站不售卖代码,资源标价只是站长收集整理的辛苦费!如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
7. 站长QQ号码 2205675299

资源库 - 资源分享下载网 » PHPSTORM中怎么调试Docker项目

常见问题FAQ

关于资源售价和售后服务的说明?
本站所有资源的标价均为本站收集资源的辛苦费,不代表资源本身的价值。软件是高智慧高价值的商品,不可能是白菜价。本站资源标价只是赞助费用,收取的赞助费仅用来维持本站的日常运营!毕竟收集整理资料需要投入云计算资源和站长大量的精力。
代码有没有售后服务和技术支持?
由于代码的运行具有不可预见性,本站不保证代码完整可运行,不提供技术支持和售后服务。 本站原创代码都是站长自己开发的,可以有偿提供技术支持服务。 网站里标明【亲测】的代码都是站长亲测过的,其他的代码由于精力有限,没有一一测试,不能保证代码就一定能够使用,更没有技术支持服务,下载前请自行斟酌。
有没有搭建服务?
由于搭建服务比较费时费力,所以本站除了原创代码外均不提供搭建服务。本站分享代码纯属兴趣爱好,不以盈利为目的,请勿咨询有没有搭建服务,谢谢理解。
链接地址失效了怎么办?
请带上资源链接地址联系客服,工作时间内我们看到后将第一时间回复。
关于解压密码
本站资源一般都没有加密,如果发现需要解压密码的,那么就输入 hao.35dc.com 试试。

发表评论

资源库,由老程序员细心甄别、精心筛选,只为提供优质的源码资源

关于我们 联系我们