Docker 桥接和 nginx 允许的 ip

pau*_*l23 6 nginx ip-forwarding docker

我们有一个包含多个 docker 容器的 docker 桥接器。主要的 docker 是一个 nginx 服务器,它充当网络主机并将所有数据转发到其他容器。

现在的要求是连接仅限于指定的 IP 地址列表。为此,我编辑了 nginx 服务器文件:

server {
        allow 127.0.0.0/8;
        deny all;
        ...
Run Code Online (Sandbox Code Playgroud)

这应该允许环回 127.0.0.1 连接。

然而,这失败了,查看 access.log 显示了原因:所有行都以:

    172.25.0.1 - - [10/Apr/2018:08:22:46 +0000] "GET
Run Code Online (Sandbox Code Playgroud)

172.25.0.1是docker bridge网络网关;因此,码头工人“忘记”了外部 ip,我无法再对其进行过滤。

如何过滤ips?或者将源ips转发给docker?

hoo*_*enz 1

这是预期的,也是 docker 网络的工作方式。默认情况下,您最终会在 docker 主机上得到类似于虚拟网络的东西。从外部转发的连接将通过 docker0 和 NAT 到达每个容器。

为了克服这个问题,简单的答案是在 nginx 容器上使用主机网络。--network host即命令选项 docker run。请参阅:主机网络

另外,请通读 docker 网络文档。那里解释得更彻底。 https://docs.docker.com/network/