【问题标题】:Why I get the gateway IP as source address in Docker bridge networking?为什么我在 Docker 桥接网络中获取网关 IP 作为源地址?
【发布时间】:2017-07-25 04:27:04
【问题描述】:

我最初正在使用 Docker 桥接网络进行一些组合,并注意到请求总是从网关 IP 发送,而不是列入白名单的本地 IP。

为了以最小的努力重现它,我使用了两个 Python 容器来运行 HTTP 服务器和客户端:

docker run -it --rm python:alpine sh

在服务器端:

python -m http.server

在客户端:

wget 172.17.0.3:8000

预期的输出,是请求来自容器IP:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...          
172.17.0.2 - - [time] "GET / HTTP/1.1" 200 -

实际输出,请求来自网桥网关IP:

Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...          
172.17.0.1 - - [time] "GET / HTTP/1.1" 200 -

但是,当我在笔记本电脑上运行相同的测试时,我得到了预期的行为(容器 IP)。这个问题似乎只发生在我的服务器上。

什么会导致这种行为?是某种 sysctl 或 iptables 问题吗?

【问题讨论】:

    标签: docker network-programming


    【解决方案1】:

    我找到了原因,这是一个古老的iptables-save 条目。很难注意到 iptables -nvL 默认不显示 NAT 规则。

    从/etc/iptables/rules.v4 中删除它们后,一切都按预期进行。

    【讨论】:

      猜你喜欢
      • 2019-05-20
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-01
      • 2018-09-01
      • 1970-01-01
      相关资源
      最近更新 更多