从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
提前致谢。
编辑: 此解决方案现已无用。从1.12版开始,Docker提供了两个网络驱动程序:macvlan和ipvlan。它们允许从LAN网络分配静态IP。。
寻找有相同问题的人后,我们采取了一种解决方法:
我们希望在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,这就是我们的路由器。
br-[a-z0-9]+
使用DefaultGatewayIPv4参数:
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(可用):
--gateway
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到上一个命令来指定网桥名称。
-o com.docker.network.bridge.name=br-home-net
现在我们有了一个br-[a-z0-9]+由Docker创建的网桥()。我们需要将其桥接到物理接口(在我的情况下,我必须连接到NIC,所以我为此使用eth1):
brctl addif br-home-net eth1
现在我们可以从网桥中删除IP地址,因为我们不需要一个IP地址:
ip a del 192.168.1.200/24 dev br-home-net
192.168.1.200由于我们不使用该IP,因此可以将其用作多个Docker主机上的桥接。
192.168.1.200