如何从网络上的 docker 容器访问本地主机上的网络服务器 运行?

How to access webserver running on localhost from a docker container on a network?

我的系统配置如下:

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

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

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

我尝试过的主机名:

每次我收到错误或超时。当我在本地 运行 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 网络上的容器执行此操作,这是微不足道的,因为您可以直接访问 localhost0.0.0.0 而无需使用实机IP.