PhpStorm 多 docker 主机名解析
PhpStorm multi-docker hostname resolution
我有一个完全设置的 docker 环境,配备了 Xdebug,正确设置了 PhpStorm。我的环境有多个容器 运行ning 用于不同的功能。一切似乎都很好。 CLI/Web 交互都在断点处停止,没问题。然而...
我有一个代码片段如下:
// test.php
$host = gethostbyname('db'); //'db' is the name of the other docker box, created with docker-compose
echo $host;
如果我 运行 通过 bash 在 'web' docker 实例中:
php test.php
172.21.0.2
如果我运行通过浏览器:
172.21.0.2
如果我 运行 通过 PhpStorm run/debug 按钮 (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
没有解决!为什么会这样,我该如何解决?
碰巧,我的 docker 环境是用 docker-compose 构建的,所有相关容器都在同一个网络上,并且有一个适当的 depends_on 层次结构。
不过。 PHPStorm 实际上被设置为使用纯 docker,而不是 docker-compose。它可以很好地连接到 docker 守护进程,但是因为容器没有构建 composer-aware,所以它没有利用我的 docker-compose.yml 中定义的网络布局.一旦我告诉 PHPStorm 使用 docker-compose,它工作正常。
顺便说一句,我注意到在加载容器后 运行 一个 in-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
这让我能够在-IDE 现场调试而不用杀死我的主 Web 容器。
我有一个完全设置的 docker 环境,配备了 Xdebug,正确设置了 PhpStorm。我的环境有多个容器 运行ning 用于不同的功能。一切似乎都很好。 CLI/Web 交互都在断点处停止,没问题。然而...
我有一个代码片段如下:
// test.php
$host = gethostbyname('db'); //'db' is the name of the other docker box, created with docker-compose
echo $host;
如果我 运行 通过 bash 在 'web' docker 实例中:
php test.php
172.21.0.2
如果我运行通过浏览器:
172.21.0.2
如果我 运行 通过 PhpStorm run/debug 按钮 (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
没有解决!为什么会这样,我该如何解决?
碰巧,我的 docker 环境是用 docker-compose 构建的,所有相关容器都在同一个网络上,并且有一个适当的 depends_on 层次结构。
不过。 PHPStorm 实际上被设置为使用纯 docker,而不是 docker-compose。它可以很好地连接到 docker 守护进程,但是因为容器没有构建 composer-aware,所以它没有利用我的 docker-compose.yml 中定义的网络布局.一旦我告诉 PHPStorm 使用 docker-compose,它工作正常。
顺便说一句,我注意到在加载容器后 运行 一个 in-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
这让我能够在-IDE 现场调试而不用杀死我的主 Web 容器。