Порт хоста закрыт внутри контейнера Docker - PullRequest
0 голосов
/ 03 июля 2018

Цель

Я пытаюсь выяснить, почему я не могу получить доступ к PhpStorm через порт 9000 из моего контейнера Docker.

Настройка

Dockerfile

FROM php:7.1-apache

RUN apt-get update && apt-get install -y telnet nmap

докер-compose.yml

version: '3'
services:
  test:
    build: .

Steps

  • Тестовый порт доступен с хоста: telnet 127.0.0.1 9000 (успешно)
  • docker-compose up
  • docker container ls
  • docker exec -it [CONTAINER] /bin/bash
  • Найти IP-адрес хоста внутри контейнера: /sbin/ip route | awk '/default/ { print $3 }'
  • Ping IP изнутри контейнера: ping 172.18.0.1 (успешно)
  • Внутри контейнера попробуйте подключиться к порту, используя IP-адрес хоста: telnet 172.18.0.1 9000 (ошибка)
  • Внутри контейнера проверьте, открыт ли порт, используя nmap: nmap 172.19.0.1 -p 9000 (показывает, что порт закрыт) * ​​1038 *

Сбой Telnet с telnet: Unable to connect to remote host: Connection refused

nmap результаты:

# nmap 172.19.0.1 -p 9000

Starting Nmap 6.47 ( http://nmap.org ) at 2018-07-03 18:43 UTC
Nmap scan report for 172.19.0.1
Host is up (0.000040s latency).
PORT     STATE  SERVICE
9000/tcp closed cslistener
MAC Address: [redacted] (Unknown)

Nmap done: 1 IP address (1 host up) scanned in 0.68 seconds

Мой вопрос

Как мне получить доступ к порту 9000 (который используется PhpStorm для прослушивания соединений Xdebug) внутри моего контейнера Docker?

1 Ответ

0 голосов
/ 04 июля 2018

Вы запускаете Docker на Mac .. и там Docker имеет некоторые нюансы, когда дело доходит до настройки сети.

Вполне вероятно, что обнаруженный вами IP-адрес (172.18.0.1) не является действительным IP-адресом хоста.

Лучше, если вы используете специальное имя хоста host.docker.internal (согласно официальной статье об обходном документе: https://docs.docker.com/docker-for-mac/networking/#per-container-ip-addressing-is-not-possible)

...