Разрешение имени хоста для нескольких докеров PhpStorm - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть полностью настроенная докерская среда с Xdebug, правильно настроенная с помощью PhpStorm. В моей среде есть несколько контейнеров для разных функций. Кажется, все работает отлично. Взаимодействие CLI / Web останавливается на точках останова, как и должно быть, без проблем. Однако ...

У меня есть следующий фрагмент кода:

// test.php
$host = gethostbyname('db'); //'db' is the name of the other docker box, created with docker-compose
echo $host;

Если я запускаю это через bash в экземпляре док-станции 'web':

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 голосов
/ 14 ноября 2018

Как оказалось, моя докерская среда построена с помощью docker-compose, и все соответствующие контейнеры находятся в одной сети и имеют надлежащую иерархию зависимость_

Тем не менее. 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

Это позволяет мне оперативно выполнять отладку в среде IDE, не убивая мой основной веб-контейнер.

...