我有一个完全安装的docker环境,配备了Xdebug,并已使用PhpStorm进行了正确设置。我的环境中有多个运行不同功能的容器。一切似乎都很棒。 CLI / Web交互都在断点处停止,没有问题。但是...
我有一个如下的代码段:
// test.php
$host = gethostbyname('db'); //'db' is the name of the other docker box, created with docker-compose
echo $host;
如果我通过“ web”泊坞窗实例中的bash运行此命令:
php test.php
172.21.0.2
如果我通过浏览器运行它:
172.21.0.2
如果我通过PhpStorm运行/调试按钮(Shift + F9)运行它:
docker://docker_web:latest/php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_host=172.17.0.1 /opt/project/test.php
db
它无法解决!为什么会这样,我该如何解决?
答案 0 :(得分:0)
碰巧,我的docker环境是使用docker-compose构建的,所有相关的容器都在同一网络上,并且具有适当的depends_on层次结构。
但是。实际上,PHPStorm设置为使用普通docker,而不是docker-compose。它可以很好地连接到docker守护程序,但是因为该容器没有构建为可识别作曲家的容器,所以它没有利用docker-compose.yml中定义的网络布局。一旦我告诉PHPStorm使用docker-compose,它就可以正常工作。
顺便说一句,我注意到在加载容器后运行IDE调试会话后,导致脚本结束时容器退出。为了解决这个问题,我必须为PHPStorm创建一个镜像调试容器以按需使用。我的配置如下:
version: '3'
services:
web: &web
build: ./web
container_name: dev_web
ports:
- "80:80"
volumes:
- ${PROJECTS_DIR}/project:/srv/project
- ./web/logs/httpd:/var/log/httpd
depends_on:
- "db"
networks:
- backend
web-debug:
<< : *web
container_name: dev_web_debug
ports:
- "8181:80"
command: php -v
db:
image: mysql
container_name: dev_db
ports:
- "3306:3306"
volumes:
- ./db/conf.d:/etc/mysql/conf.d
- ./db/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
networks:
- backend
networks:
backend:
driver: bridge
这使我能够在不杀死我的主要Web容器的情况下进行IDE现场调试。