从主机Web浏览器访问驻留在Docker容器内的apache2

我一直在创build一个Web服务器作为Docker容器,并试图在容器外访问它。 但我不能。 我在做什么。

– 拉出一个Ubuntu镜像:

docker pull ubuntu:14.04 

– 开始一个容器:

 docker -t -i -p 49200:2375 [image-id] 

并在新启动的容器中安装apache2后,我可以ping容器内的apache2服务器,我也可以在容器terminal上做curl查看结果,但在主机上没有运气。 我已经尝试了很多次。 (我在Windows上使用虚拟框)

屏幕截图:

码头工人1

码头2

问题:

  1. 我是否使用正确的docker命令和端口号来创build容器。
  2. Apacheconfiguration有什么错误吗? (我在默认模式下使用Apache而没有任何configuration)
  3. 端口在我的虚拟箱或我的电脑上有什么问题吗? 我对networking的知识很低。

有人可以帮助!

问题1 :Apache默认端口

2375端口不是apache的默认端口,而是docker守护进程的默认端口,命令应该是

 docker -t -i -p 49200:80 [image-id] 

问题2 :在不同的机器上的端口

49200:80这是从内部端口80Docker主机 49200的映射,Docker主机实际上是您的虚拟框VM(猜测是您的boot2docker外壳)

在您的虚拟机VM控制台中,您可以

 curl localhost:49200 

图片“端口转发规则”正在帮助您的端口转发到您的虚拟主机,因为它是MacOS,您在那里映射49200到MacOS 49200以及

所以在你的MacOS shell控制台中,你也可以

 curl localhost:49200 

如果您知道virtualbox VM(docker主机)的IP地址,例如它是boot2docker默认的192.168.59.103 ,那么您可以

 curl 192.168.59.103:49200 

如果你想通过172.17.0.7访问Apache Docker容器,记住这是私有网络,你需要启动另一个容器

 docker -t -i busybox bash # curl 172.17.0.7:80 

概要

docker -p是将您的内部端口转发到docker主机virtualbox设置中的“端口转发规则”是将VM端口转发到VM主机

  • Apache泊坞窗容器:172.17.0.7:80
  • docker host = virtualbox VM:192.168.59.103:49200
  • virtualbox主机= MacOS:xxxx:49200