我最初在做一些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问题吗?
发布于 2017-07-25 21:09:28
我已经找到了原因,这是一个古老的iptables-save条目。很难注意到这一点,因为默认情况下iptables -nvL不显示NAT规则。
将它们从/etc/iptables/rules.v4中删除后,一切都正常工作。
https://stackoverflow.com/questions/45293932
复制相似问题