如何从网络上的docker容器访问localhost上运行的webserver?

时间:2016-04-19 20:39:35

标签: macos docker docker-machine

我有以下系统配置:

  • 在用户定义的网络上运行的Docker容器
  • docker-machine(OS上的VirtualBox:X转发端口9000到9000)
  • http://localhost:9000
  • 上运行的本地网络服务器

我不知道如何针对此网络服务器发出基本的http请求,来自我的docker容器中的

为了测试这个,我正在使用:

head

我尝试过的,主机名:

  • '本地主机'
  • ' 127.0.0.1'
  • ' 192.168.99.100' (docker-machine IP)

每次收到错误或超时。当我在本地运行curl命令时(不在docker和我的主机操作系统:X机器上),我能够成功发布http请求。

我无法断开Docker容器与用户定义网络的连接。我也无法将我的网络服务器添加到该网络,因为它没有在容器中运行。另外,我知道连接另一种方式(curl到在docker容器中运行的web服务器)是微不足道的,但这不是我的用例。

如何成功将http请求从作为用户定义网络一部分的docker容器路由到我的localhost网络服务器?

2 个答案:

答案 0 :(得分:3)

您可以使用本地计算机的实际IP地址执行此操作。

例如,如果您的主机操作系统上的en0 IP是10.100.20.32 ,则可以运行:

docker exec testcontainer curl --data "foobaz=foo" http://10.100.20.32:9000/

将成功允许您发出http请求。

请注意,如果您是通过主机泊坞网络上的容器执行此操作,则这很简单,因为您可以直接访问localhost0.0.0.0,而无需使用实际的计算机IP。

答案 1 :(得分:-1)

您可能想要检查容器的IP地址是什么 - 您可以通过运行docker inspect找到它。 但是,如果您想使用docker机器IP访问容器中运行的服务器进程,那么您应该“公开”包含应用程序正在侦听的端口9000(使用Dockerfile) - 这样,您仍然需要计算9000容器端口映射到哪个端口(显示在通过$ docker ps列出容器时。您还可以在启动容器时在命令行中指定端口绑定选项,如下所示:$ docker run -p 9000:9000 <your-container>