PhpStorm多docker主机名解析

时间:2018-11-09 18:41:13

标签: php docker phpstorm xdebug

我有一个完全安装的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

它无法解决!为什么会这样,我该如何解决?

1 个答案:

答案 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现场调试。