一尘不染

局域网中的Docker 1.10容器的IP

docker

从Docker 1.10(和libnetwork更新)开始,我们可以手动为用户定义网络内的容器提供IP,这很酷!

我想在局域网中给容器一个IP地址(就像我们可以在“桥接”模式下使用虚拟机一样)。我的局域网是192.168.1.0/24,我的所有计算机内部都有IP地址。而且我希望我的容器的IP处于此范围内,以便可以从LAN中的任何位置(不使用NAT/ PAT / etc …)访问它们。

编辑 :的确,如果我做类似的事情:

network create --subnet 192.168.1.0/24 --gateway 192.168.1.1 homenet
docker run --rm -it --net homenet --ip 192.168.1.100 nginx

泊坞窗主机上的新接口(br- [a-z0-9] +)使用“ –gateway” IP,这是我的路由器IP。网络上两台计算机上的IP相同… BOOM

提前致谢。


阅读 311

收藏
2020-06-17

共1个答案

一尘不染

编辑:
此解决方案现已无用。从1.12版开始,Docker提供了两个网络驱动程序:macvlan和ipvlan。它们允许从LAN网络分配静态IP。。


寻找有相同问题的人后,我们采取了一种解决方法:

总结 :

  • (V)LAN为192.168.1.0/24
  • 默认网关(=路由器)为192.168.1.1
  • 多个Docker主机
  • 注意:我们有两个NIC:eth0和eth1(专用于Docker)

我们想要什么 :

我们希望在192.168.1.0/24网络中拥有带有ip的容器(例如计算机),而没有任何NAT / PAT /转换/端口转发/等。

问题

这样做时:

network create --subnet 192.168.1.0/24 --gateway 192.168.1.1 homenet

我们可以为容器提供所需的IP, 但是 docker(br-[a-z0-9]+)创建的网桥将具有IP 192.168.1.1,这就是我们的路由器。

1.设置Docker网络

使用DefaultGatewayIPv4参数:

docker network create --subnet 192.168.1.0/24 --aux-address "DefaultGatewayIPv4=192.168.1.1" homenet

默认情况下,Docker会将br-[a-z0-9]+第一个IP
提供给网桥接口(),该IP可能已被另一台机器使用。解决方案是使用--gateway参数告诉docker分配任意IP(可用):

docker network create --subnet 192.168.1.0/24 --aux-address "DefaultGatewayIPv4=192.168.1.1" --gateway=192.168.1.200 homenet

我们可以通过添加-o com.docker.network.bridge.name=br-home-net到上一个命令来指定网桥名称。

2.架桥!

现在我们有了一个br-[a-z0-9]+由Docker创建的网桥()。我们需要将其桥接到物理接口(在我的情况下,我必须连接到NIC,所以我为此使用eth1):

brctl addif br-home-net eth1

3.删除网桥IP

现在我们可以从网桥中删除IP地址,因为我们不需要一个IP地址:

ip a del 192.168.1.200/24 dev br-home-net

192.168.1.200由于我们不使用该IP,因此可以将其用作多个Docker主机上的桥接。

2020-06-17