4

我一直在创建一个网络服务器作为 Docker 容器,并尝试在容器外访问它。但我不能。我正在做的是。

- 拉取一个 ubuntu 图像:

docker pull ubuntu:14.04

- 启动容器:

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

在新启动的容器中安装 apache2 后,我可以 ping 容器内的 apache2 服务器,我也可以进行 curl 并在容器终端中查看结果,但在主机之外没有运气。我已经试过很多次了。(我在 Windows 上使用 Virtual Box)

屏幕截图:

码头工人 1

码头工人 2

问题:

  1. 我是否使用正确的 docker 命令和端口号来创建容器。
  2. apache配置有什么问题吗?(我在默认模式下使用 apache,没有任何配置)
  3. 我的虚拟盒子或电脑上的端口有什么问题吗?我对网络的了解非常少。

谁能帮忙!!!

4

1 回答 1

3

问题 1:Apache 默认端口

2375port 不是 apache 默认端口,它是 docker daemon 默认端口,命令应该是

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

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

49200:80这是从内部端口80docker host 49200的映射, docker host 实际上是您的虚拟机虚拟机(猜测是您的 boot2docker shell)

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

curl localhost:49200

图片“端口转发规则”正在帮助您将端口转发到您的 virtualbox 主机,对您来说它是 MacOS,您也映射到49200MacOS49200

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

curl localhost:49200

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

curl 192.168.59.103:49200

如果你想通过 访问 apache docker 容器172.17.0.7,记住这是里面的私有网络,你需要启动另一个容器,比如

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

概括

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

  • 阿帕奇码头集装箱:172.17.0.7:80
  • 码头主机=虚拟机虚拟机:192.168.59.103:49200
  • 虚拟机主机=MacOS: xxxx:49200
于 2014-08-07T00:41:23.190 回答