【问题标题】:Cannot access port published in a Docker custom bridge network from the host无法从主机访问在 Docker 自定义桥接网络中发布的端口
【发布时间】:2018-08-13 13:54:05
【问题描述】:

所以,情况如下。我有两个容器,一个提供数据库服务,另一个提供前端。前端容器使用它的一个端口连接到 DB 容器,然后发布它自己的一个端口以提供一系列 RESTful 服务。

此配置在默认网桥中运行良好。但是,我在 Docker 文档中读到,不建议在生产环境中的默认网桥上运行容器,因为这些端口将暴露给任何机器,而不仅仅是在网络中。他们建议在这种情况下使用自定义网桥。

这个想法是(如文档中描述的用例之一),我的前端可以通过发布相应的端口从主机访问,但不能访问 DB 容器,它应该只能由连接到同一个自定义桥的前端容器。

我已经设置了这样的配置,但是现在,即使前端的端口已经暴露和发布,它也无法从主机访问。我想我做错了什么或误解了一些概念,但我似乎无法弄清楚。

我采取的步骤如下:

  • 创建自定义网络:

    docker network create --subnet=172.19.0.0/16 -o com.docker.network.bridge.enable_ip_masquerade=true -o com.docker.network.bridge.host_binding_ipv4="172.19.0.1" -o com.docker.network.bridge.enable_icc=true -o com.docker.network.bridge.name="serversBridge" servers

  • 运行数据库容器:

    docker run -d --name testDb --network servers --ip 172.19.0.2 couchdb

  • 运行前端容器:

    docker run --name myApp --network servers --ip 172.19.0.3 -p 12345:12345 myApp

如果我然后运行docker ps,我会得到下一行:

`CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS                 PORTS                                                            NAMES
6b8e93e6e9e1          myApp                        "./myApp"             4 hours ago         Up 4 hours             172.19.0.1:12345->12345/tcp                                      myApp`

但是,如果我尝试从主机访问该 IP 地址和端口,我将收到“连接被拒绝”消息。我检查了 IP 表,但有一个规则:

target     prot opt source               destination
ACCEPT     tcp  --  anywhere             172.19.0.3           tcp dpt:12345

所以我目前的猜测是我的请求实际上被转发到容器并被它拒绝。是不是我做错了什么或者我误解了一些概念?

【问题讨论】:

  • 您是否尝试过使用 localhost? 127.0.0.1:12345
  • 是的,实际上我最初已经将它配置为将容器的端口映射到主机的 0.0.0.0 并且在这两种情况下尝试访问 localhost 时连接都被拒绝。

标签: docker networking bridge


【解决方案1】:

我最终解决了这个问题,方法是在容器内的本地广播 IP 地址 (0.0.0.0) 上运行应用程序,而不是将其绑定为侦听本地 IP 地址 (127.0.0.1)。

据我了解,主机访问 IP 地址172.19.0.1 以访问此容器,请求不会来自127.0.0.1 接口,它们将被拒绝。

即使我尝试将端口转发到主机的0.0.0.0:12345 并通过从主机向localhost:12345 发送请求来访问网络时也是如此,因为我的默认网桥会创建一个 NAT 伪装并转发使用对应的内部 IP 地址(172.19.0.3)在本地请求。

我仍然不完全理解的是为什么相同的配置可以在默认网桥上工作。我认为它的伪装不是以同样的方式完成的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 2020-05-18
    • 1970-01-01
    • 2018-11-25
    相关资源
    最近更新 更多