连接到docker主机IP

问题描述 投票:0回答:1

我有一台 docker 主机,位于一个小型专用网络上,该网络上还连接了一些 IP 摄像机,其中一个位于例如192.168.10.10。 我还有一个需要相互通信的 docker 容器集群,将其保留在自己的 docker 桥接网络中会很方便。 问题是:我可以允许容器访问容器主机可以解析的非公共 IP,同时仍然连接到桥接网络吗?

  • docker 禁止将容器附加到
    --network=host
    --network=mycoolnet
    (“无法同时附加用户定义和非用户定义的网络模式。”)
  • 简单地添加一个辅助主机(例如
    --aux-host=mycamera:192.168.10.10
    )可以提供一个不错的主机名,但不会使该IP上的内容在容器内可访问
  • 据我了解 macvlan 网络,定义网络(例如
    docker network create -d macvlan --subnet 192.168.0.0/16 --gateway 192.168.0.1 -o parent mynetworkdevice my-macvlan-net
    )会在该子网上为容器分配一个身份,但并不会使该子网的内容必须可供容器使用。

我不是问具体如何连接到本地主机;在另一个问题

中已经简洁而正确地回答了这个问题

编辑:这个原始问题中尚不清楚的一个复杂问题(也是解决问题的关键)是,192.168.10.10 不能由主机上的主网络接口解析,而是由第二个接口(前面提到的“小专用网络”)解析。 ”)

docker docker-network
1个回答
0
投票

我遇到的问题与 docker 网络本身如何工作无关,而是与 iptables 如何路由我的请求有关。 我在最初的问题(我将很快更新)中没有提到的一个复杂问题是 docker 主机位于多个网络上。 对 192.168.10.10 的请求将退出 docker 容器并由主网络接口处理,但辅助网络接口可以解决该请求。 因此,请求将在容器内被退回。 在容器之外,主机知道尝试这两个接口,并且可以很好地满足我的请求。

解决我的特殊情况的步骤:

  1. 创建docker网络时,我使用特定的子网来创建它

    docker network create --driver=bridge --subnet=192.168.100.0/24 dev2-bridge
    
  2. 检查iptables,可以看到docker创建了一个伪装规则,这显然不是我想要的:

    > iptables -L -n -t nat
    ...
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination
    MASQUERADE  all  --  192.168.100.0/24        0.0.0.0/0
    ...
    
  3. 让我们看看我的IP路由并找到我想要的设备的网关

    > ip route
    ...
    192.168.10.0/24 dev interface2 proto kernel scope link src 192.168.10.3 metric 101
    

    看起来我想使用网关 192.168.10.3 来解析 192.168.10.0 地址!

  4. 我删除了伪装规则(我下面的命令从技术上删除了newest规则),并添加了一个SNAT规则

    > iptables -t nat -D POSTROUTING 1
    > iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -d 192.168.10.0/24 -j SNAT --to-source 192.168.10.3
    > iptables -L -n -t nat
    ...
    Chain POSTROUTING (policy ACCEPT)
    target     prot opt source               destination
    ...
    SNAT       all  --  192.168.100.0/24     0.0.0.0/0            to:192.168.10.3
    ...
    

    这意味着 docker 网络 dev2-bridge 现在看不到我的本地网络 192.168.10.3 看不到的任何内容。 这对我来说很好! 它可能不适合您的用例。

ServerFault 上的这个答案是获得我需要的结果的关键。

© www.soinside.com 2019 - 2024. All rights reserved.