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:
- 我为 docker 主机上的所有服务创建了 ip 别名
- 然后我 运行 每个服务将端口从这个 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。
我在玩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:
- 我为 docker 主机上的所有服务创建了 ip 别名
- 然后我 运行 每个服务将端口从这个 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。