如何访问从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上的容器来执行此操作,则可以直接访问localhost
或0.0.0.0
而无需使用实际的计算机IP。
你可能想检查一下容器的IP地址是什么 – 你可以通过运行docker inspect
来发现。 但是,如果您想使用docker machine IP访问在您的容器中运行的服务器进程,那么您应该“暴露”您所包含的应用程序正在侦听的端口9000(使用Dockerfile) – 这样,您仍然需要9000容器端口映射到哪个端口(当你通过$ docker ps
列出你的容器时,你可以在命令行中指定端口绑定选项,如下所示: $ docker run -p 9000:9000 <your-container>
。