Docker。从与主机相同的范围分配 IP

Docker. Assign IP from the same range as Host

我在玩docker。现在我想从与主机 OS 相同的 IP 范围内将 IP 分配给容器。

我的主机的 IP 地址为 192.168.1.50(192.168.1.0/24 网络)。我想使用来自同一网络的 192.168.1.51 作为 Docker 容器。

为此,我安装了 bridge-utils(我使用的是 Ubuntu 14.04)并重新配置了我的接口:

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet manual

auto br0
iface br0 inet static
        address 192.168.1.50
        network 192.168.1.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        gateway 192.168.1.1
        dns-nameservers 8.8.8.8 8.8.4.4
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0
        bridge_maxwait 0

现在我有这样的配置:

# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master br0 state UP group default qlen 1000
    link/ether 08:00:27:a5:22:5d brd ff:ff:ff:ff:ff:ff
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 56:84:7a:fe:97:99 brd ff:ff:ff:ff:ff:ff
    inet 172.17.42.1/16 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::5484:7aff:fefe:9799/64 scope link 
       valid_lft forever preferred_lft forever
4: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 08:00:27:a5:22:5d brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.50/24 brd 192.168.0.255 scope global br0
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fea5:225d/64 scope link 
       valid_lft forever preferred_lft forever

如何使用与主机相同的 IP 范围 192.168.1.0/24 中的 IP 创建每个新的 dockers?如何为每个新的 docker 容器指定使用 br0 接口?

不是直接的答案,但如果您的目标是向本地网络公开 docker 服务,它可能会有所帮助。

我 运行 我的大部分 docker 化服务使用下一种方法绑定到自己的静态 ip:

  1. 我为 docker 主机上的所有服务创建了 ip 别名
  2. 然后我 运行 每个服务将端口从这个 ip 重定向到容器,这样每个服务都有自己的静态 ip,可以被外部用户和其他容器使用。

样本:

docker run --name dns --restart=always -d -p 172.16.177.20:53:53/udp dns
docker run --name registry --restart=always -d -p 172.16.177.12:80:5000 registry
docker run --name cache --restart=always -d -p 172.16.177.13:80:3142 -v /data/cache:/var/cache/apt-cacher-ng cache
docker run --name mirror --restart=always -d -p 172.16.177.19:80:80 -v /data/mirror:/usr/share/nginx/html:ro mirror
...

因此,每个人(包括其他 docker 个容器)都可以通过众所周知的地址或名称使用容器中的服务,您甚至可以将容器(具有相应的别名)移动到不同的主机,一切都将继续工作.

Docker 做不到。它只能自行决定设置IP。