如何访问从networking上的docker集装箱本地主机上运行的Web服务器?

我有以下系统configuration:

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

我不知道如何 Docker容器中对这个Web服务器发出一个基本的http请求。

为了testing这个我正在使用:

docker exec testcontainer curl --data "foobaz=foo" http://{hostname}:9000/ 

我已经尝试了,主机名:

  • 'localhost' 的
  • '127.0.0.1'
  • '192.168.99.100'(docker-machine IP)

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

我无法断开我的用户定义的networking泊坞窗容器。 我也无法将我的networking服务器添加该networking,因为它不在容器中运行。 此外,我知道这是微不足道的连接另一种方式(curl到运行在docker集装箱的networking服务器),但这不是我的用例。

我怎样才能成功路由该HTTP请求从泊坞窗容器,这是一个用户定义的networking的一部分到我的localhostnetworking服务器?

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

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

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

这将成功地让你做出http请求。

请注意,如果您是通过主机dockernetworking上的容器来执行此操作,则可以直接访问localhost0.0.0.0而无需使用实际的计算机IP。

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