2016-06-30 4 views
0

Я пытаюсь настроить интеграцию xdebug на моей настройке на докере.Docker - порт предотвращает прослушивание

  • Я использую Docker для Mac 1.12.0-rc2-beta17 с "родной" Docker машины
  • У меня есть контейнер с Xdebug установлен, обнажая порт 9000 и отображение его на порт 9000:

    $ docker ps 
    CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS                  NAMES 
    6950c2a2b05d  app  "/usr/bin/supervisord" 9 minutes ago  Up 9 minutes  0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:2222->22/tcp app_1 
    
  • Когда я пытаюсь использовать PhpStorm слушать порт 9000 для отладки соединения, я получаю сообщение об ошибке «не удается слушать: порт 9000 занят».

я должны уточнить, что я новичок в сети ..

+0

Попробуйте выполнить 'Судо Lsof -np -iTCP -stcp: команда LISTEN' и посмотреть, что приложение прослушивает этот порт TCP 9000. – LazyOne

+0

Порт (или сокет, который является конечной точкой, состоящей из _ip_address: port_), не является ресурсом, который можно вытеснять: не более ** один единственный процесс может получить к нему доступ. В контейнере используется порт '9000', поэтому PhpStorm не может использовать его одновременно.Можете ли вы показать команду 'docker run', пожалуйста? – Auzias

+0

@LazyOne: вот вывод: 'COMMAND PID USER FD TYPE DEVICE SIZE/OFF УЗЕЛ ИМЯ com.docke 36299 repptilia 11U IPv4 0x7faf9785f44d7ab 0t0 TCP *: 9000 (СЛУШАТЬ)' – repptilia

ответ

0

Во-первых, проверьте журналы контейнера для отладки:

docker logs 6950c2a2b05d 

или

docker logs app_1 

Добавить -f флаги для tail -подобное поведение:

docker logs -f app_1 
1

Это зависит, как вы хотите подключить через Xdebug

xdebug.remote_connect_back=1 сказал, что PHP не будет ждать, пока запрос HTTP GET с параметром XDEBUG_SESSION_START=<IDE_key>. Затем PHP внутри сервера попытается подключиться обратно через порт 9000, где находится ваш PHPStorm. Классик не звоните нам, мы будем называть вас ситуацией.

Теперь ваша ситуация с докером проста, ваш контейнер отвечает за порт 9000. Таким образом, PHP получит loopback, а PHPStorm не сможет использовать порт 9000, поскольку он уже используется вашим контейнером докера.

Итак, пропустите назначение порта 9000 в докер, что исправит эту ситуацию.

+0

Что вы предлагаете? Что я удаляю строку «9000: 9000» из моего docker-compose.yml? Если я это сделаю, я не смогу поймать в PHPStorm точки останова. Если я просто использую «9000», докер назначает случайный порт, с которым я не могу подключиться, если я изменю конфигурацию PHPStorm по тем же причинам. – repptilia

+1

PHPStorm не подключается к вашему Docker, это будет противоположный PHP, который будет подключаться к вашему хосту, где работает ваш PHPStorm, и прослушивать порт 9000, который ваш PHP подключается. – zeitiger

+0

Да ... мне понадобилось время, чтобы понять это. – repptilia

0

Две вещи, которые я обнаружил:

  • Там нет необходимости подвергать порт 9000 на контейнере с Xdebug (что кажется довольно нелогичным для меня, так как я не совсем понимаю, как мой IDE подключается к xdebug then).
  • Я смог использовать xdebug, используя обходное решение, описанное в https://forums.docker.com/t/ip-address-for-xdebug/10460/4.
0

Вы должны связать порт 9000 с опцией --expose.

This is the reference

, если вы используете Docker Compose образец Докер-compose.yml файл здесь:

version: '2' 
    services: 
     your_app: 
     ports: 
     - "80:80" 
     expose: 
     - "9000" 
     image: "your-image:tag" 
Смежные вопросы