在Windows主机上访问Docker容器URL

注意事项#1 :我已经阅读了这个答案 , 这个答案 ,以及其他答案/post,我仍然无法使其工作。

注意事项#2 :我是docker工人,所以我可能错过了一些非常简单的事情。

我在Windows上运行Docker,并使用此命令启动了此ELK映像 :

sudo docker run -p 5601:5601 -p 9200:9200 -p 5000:5000 -it --name elk sebp/elk 

我正尝试从运行在Windows上的浏览器访问端口56019200 ,并且不断收到连接超时。 以下是我所做的:

  • 我相信docker run命令(上面)已经转发端口5601和9200从容器到docker主机(boot2docker VM),所以应该没事的。
  • 我通过运行docker inspect $(docker ps -q) | grep IPA得到了elk docker container IP 在docker CLI上docker inspect $(docker ps -q) | grep IPA 。 这原来是172.17.0.9 。 然后我跑了curl 172.17.0.9:5601curl 172.17.0.9:9200 。 我能够从这些url获得正确的HTML响应。 这使我可以validation在Docker容器/主机中正确运行的东西。
  • 然后通过运行docker-machine ip default获得docker主机的IP。 这原来是192.168.99.100。 我相信这是我需要从docker主机(在这种情况下,Windows)访问麋鹿容器,因为容器的端口转发已经设置。 有了这个IP,我试着去http://192.168.99.100:5601http://192.168.99.100:9200 ,我得到ERR_CONNECTION_TIMED_OUT 。 我也尝试使用IE浏览器,甚至https踢,仍然没有运气。
  • 我也尝试从DOS的ping 192.168.99.100 ,但无法得到一个响应。 我试图放宽Windows中的防火墙规则(只是再次踢),我什么都没有。

我错过了什么?

Solutions Collecting From Web of "在Windows主机上访问Docker容器URL"

实际上在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 ,则应在运行docker的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