如何从网络上的 docker 容器访问本地主机上的网络服务器 运行?
How to access webserver running on localhost from a docker container on a network?
我的系统配置如下:
- Docker容器运行在用户定义的网络上
- docker-machine(VirtualBox 在 OS:X 转发端口 9000 到 9000)
- 本地网络服务器 运行正在 http://localhost:9000
我不知道如何从 在 我的 docker 容器中针对此网络服务器发出基本的 http 请求。
为了测试这个,我正在使用:
docker exec testcontainer curl --data "foobaz=foo" http://{hostname}:9000/
我尝试过的主机名:
- 'localhost'
- '127.0.0.1'
- '192.168.99.100'(docker-机器IP)
每次我收到错误或超时。当我在本地 运行 curl 命令时(不在 docker 和我的主机 OS:X 机器上)我能够成功 post http 请求。
我无法断开 docker 容器与我的用户定义网络的连接。我也无法将我的网络服务器 添加到 该网络,因为它不在容器中 运行ning 。另外,我知道以其他方式连接是微不足道的(curl 到 docker 容器中的网络服务器 运行ning),但这不是我的用例。
如何成功地将来自 docker 容器的 http 请求路由到我的本地主机网络服务器?docker 容器是用户定义网络的一部分?
您可能想检查容器的 IP 地址是什么 - 您可以通过 运行 docker inspect
找到它。
但是,如果您想使用 docker 机器 IP 访问容器中的服务器进程 运行,那么您应该 "expose" 您包含的应用程序正在侦听的端口 9000(使用 Dockerfile)-这样,您仍然需要弄清楚 9000 容器端口映射到哪个端口(当您通过 $ docker ps
列出容器时会显示)。您还可以在启动容器时在命令行中指定端口绑定选项,例如这:$ docker run -p 9000:9000 <your-container>
。
您可以使用本地计算机的实际 IP 地址执行此操作。
例如,如果您的主机 OS 上的 en0 IP 是 10.100.20.32 ,您可以 运行:
docker exec testcontainer curl --data "foobaz=foo" http://10.100.20.32:9000/
这将成功允许您发出 http 请求。
请注意,如果您是从主机 docker 网络上的容器执行此操作,这是微不足道的,因为您可以直接访问 localhost
或 0.0.0.0
而无需使用实机IP.
我的系统配置如下:
- Docker容器运行在用户定义的网络上
- docker-machine(VirtualBox 在 OS:X 转发端口 9000 到 9000)
- 本地网络服务器 运行正在 http://localhost:9000
我不知道如何从 在 我的 docker 容器中针对此网络服务器发出基本的 http 请求。
为了测试这个,我正在使用:
docker exec testcontainer curl --data "foobaz=foo" http://{hostname}:9000/
我尝试过的主机名:
- 'localhost'
- '127.0.0.1'
- '192.168.99.100'(docker-机器IP)
每次我收到错误或超时。当我在本地 运行 curl 命令时(不在 docker 和我的主机 OS:X 机器上)我能够成功 post http 请求。
我无法断开 docker 容器与我的用户定义网络的连接。我也无法将我的网络服务器 添加到 该网络,因为它不在容器中 运行ning 。另外,我知道以其他方式连接是微不足道的(curl 到 docker 容器中的网络服务器 运行ning),但这不是我的用例。
如何成功地将来自 docker 容器的 http 请求路由到我的本地主机网络服务器?docker 容器是用户定义网络的一部分?
您可能想检查容器的 IP 地址是什么 - 您可以通过 运行 docker inspect
找到它。
但是,如果您想使用 docker 机器 IP 访问容器中的服务器进程 运行,那么您应该 "expose" 您包含的应用程序正在侦听的端口 9000(使用 Dockerfile)-这样,您仍然需要弄清楚 9000 容器端口映射到哪个端口(当您通过 $ docker ps
列出容器时会显示)。您还可以在启动容器时在命令行中指定端口绑定选项,例如这:$ docker run -p 9000:9000 <your-container>
。
您可以使用本地计算机的实际 IP 地址执行此操作。
例如,如果您的主机 OS 上的 en0 IP 是 10.100.20.32 ,您可以 运行:
docker exec testcontainer curl --data "foobaz=foo" http://10.100.20.32:9000/
这将成功允许您发出 http 请求。
请注意,如果您是从主机 docker 网络上的容器执行此操作,这是微不足道的,因为您可以直接访问 localhost
或 0.0.0.0
而无需使用实机IP.