泊坞窗。从与Host相同的范围分配IP

时间:2015-04-07 09:49:13

标签: ubuntu networking docker ubuntu-14.04 bridge

我正在玩码头工人。现在我想从与主机操作系统相同的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的新终结器?如何为每个新的docker容器指定使用 br0 界面?

2 个答案:

答案 0 :(得分:1)

如果您的目标是将docker服务公开给本地网络,那么这不是一个直接的答案,但它可能有所帮助。

我使用下一种方法运行大多数与自己的静态ips绑定的dockerized服务:

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

    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容器)都可以通过众所周知的地址或名称在容器中使用服务,甚至可以将容器(带有相应的别名)移动到不同的主机,一切都将继续工作。

答案 1 :(得分:-1)

Docker无法做到这一点。它只能通过自己的决定来设置IP。