Доступ к URL-адресу док-контейнера на хосте Windows
Предостережение № 1: Я прочитал этот ответ, этот ответ и множество других ответов / сообщений, и я до сих пор не могу заставить его работать.
Предостережение №2: я новичок в докере, поэтому, возможно, мне не хватает чего-то очень простого.
Я запускаю Docker в Windows, и у меня запущен образ ELK, который я запустил с помощью этой команды:
sudo docker run -p 5601:5601 -p 9200:9200 -p 5000:5000 -it --name elk sebp/elk
Я пытаюсь получить доступ к портам 5601
а также 9200
из браузера, работающего в Windows, и я продолжаю получать тайм-аут соединения. Вот что я сделал:
- Я верю
docker run
Команда (см. выше) уже перенаправляет порты 5601 и 9200 из контейнера на хост докера (boot2docker VM), так что все должно быть в порядке. - Я получил IP-адрес контейнера лося, запустив
docker inspect $(docker ps -q) | grep IPA
на док-станции CLI. Это оказалось172.17.0.9
, Я тогда побежалcurl 172.17.0.9:5601
а такжеcurl 172.17.0.9:9200
, Мне удалось получить правильные ответы HTML с этих URL. Это позволило мне убедиться, что все работает правильно в контейнере / хосте Docker. - Затем я получил IP хоста докера, запустив
docker-machine ip default
, Это оказалось 192.168.99.100. Я считаю, что это все, что мне нужно для доступа к контейнеру elk с хоста докера (в данном случае Windows), так как переадресация порта для контейнера уже была установлена. С этим IP я попыталсяhttp://192.168.99.100:5601
а такжеhttp://192.168.99.100:9200
и я получаюERR_CONNECTION_TIMED_OUT
, Я также пытался использовать IE, и дажеhttps
для ударов, и до сих пор не повезло. - Я тоже пробовал пинговать
192.168.99.100
из DOS, но не смог получить ответ. Я попытался ослабить правила брандмауэра в Windows (опять же, просто для удовольствия) и ничего не получил.
Что мне не хватает?
3 ответа
На самом деле в Windows будет работать виртуальная машина Ubuntu, кроме того, только ваши контейнеры размещены, поэтому только вы не сможете получить к ней доступ напрямую
Даже я столкнулся с той же проблемой, и я следовал приведенным ниже шагам, чтобы решить мою проблему
1. Enabled routing as told in the above post
2. Added a port forwarding from windows host to Ubuntu host where the containers are hosted by using below command
netsh interface portproxy add v4tov4 listenport=4422 listenaddress=192.168.1.111 connectport=3128 connectaddress=192.168.0.33
a. Here 192.168.1.111 is my windows host ip address and 4422 is the port to where other machines in same network will call
b. Here 192.168.0.33 is the ubuntu host where containers are hosted and 3128 is the ubuntu host port which is mapped to the container
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
090af3e0c7a4 sameersbn/squid:3.3.8-5 "/sbin/entrypoint.sh" 6 hours ag
o Up 5 hours 0.0.0.0:3128->3239/tcp squid
3. Then I added firewall to unblock inbound and outbound traffic for 4422 port in my windows host
Теперь я смог получить доступ к контейнеру из любой системы в сети:)
Если вы используете браузер на том же докере, вы должны иметь доступ к 127.0.0.1: http://127.0.0.1:5601/ http://127.0.0.1:9200/
Если вы используете браузер с другого компьютера и пытаетесь получить доступ к http://192.168.99.100:5601/ и http://192.168.99.100:9200/, вы должны включить маршрутизацию на компьютере Windows, на котором работает докер.
Перейдите в Пуск и выполните поиск по cmd или команде. Щелкните правой кнопкой мыши на cmd или команде и выберите "Запуск от имени администратора". В командной строке введите regedit. Перейдите к настройке HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\Tcpip\Parameters\IPEnableRouter, щелкните правой кнопкой мыши и выберите "Изменить". Измените 0 на 1 и выйдите из редактора.
Когда вы вернетесь в командную строку, введите services.msc и перейдите к службе маршрутизации и удаленного доступа. Щелкните правой кнопкой мыши и выберите "Свойства". Измените на Автоматический и нажмите Пуск, чтобы запустить службу. Проверьте http://answers.microsoft.com/en-us/windows/forum/windows_7-networking/how-to-enable-ip-routing-in-windows-7/8970e722-e947-460d-80d5-fd6ffc850f3f?auth=1
Я использую графический интерфейс вместо CLI, и перед запуском образа я нажимаю на дополнительные настройки и добавляю сопоставленный порт в порт контейнера, чтобы иметь доступ к URL-адресам как localhost. Не уверен, как это сделать в команде, и этот метод обычно ограничен, но позволяет просто попробовать контейнер.