【问题标题】:Docker. Assign IP from the same range as Host码头工人。从与主机相同的范围分配 IP
【发布时间】:2015-04-07 09:49:13
【问题描述】:

我在玩 docker。现在我想从与我的主机操作系统相同的 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?如何指定每个新的 docker 容器使用 br0 接口?

【问题讨论】:

标签: ubuntu networking docker ubuntu-14.04 bridge


【解决方案1】:

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

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

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

【讨论】:

  • so 172.16.177.{20,12,13,19} 在您的主机网络接口上吗?
  • 它们是主 ip 接口的 ip 别名 (en.wikipedia.org/wiki/IP_aliasing)。就像网络接口有很多地址一样。当我需要移动容器时,我可以删除一个主机上的别名并将其添加到另一台主机。
【解决方案2】:

Docker 无法做到这一点。它只能自行决定设置IP。

【讨论】:

猜你喜欢
  • 2017-06-24
  • 2018-10-14
  • 1970-01-01
  • 2011-02-11
  • 2015-08-31
  • 2018-01-04
  • 2016-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多