从 Docker 1.10(和 libnetwork 更新)开始,我们可以手动为用户定义网络中的容器分配 IP,这很酷!
我想在我的 LAN 中为容器提供一个 IP 地址(就像我们可以在“桥接”模式下使用虚拟机一样)。我的局域网是 192.168.1.0/24,我所有的电脑里面都有 IP 地址。而且我希望我的容器具有此范围内的 IP,以便从我的 LAN 中的任何地方访问它们(没有 NAT/PAT/等...)。
我显然读过 Jessie Frazelle 的 blog post还有很多其他人在这里和各处发帖,例如:
- How to set a docker container's iP?
- How to assign specific IP to container and make that accessible outside of VM host?
还有很多,但什么也没出来;我的容器仍然在我的 docker 主机“内部”有 IP 地址,并且我的 LAN 上的其他计算机无法访问。
阅读 Jessie Frazelle 的博文,我想(因为她使用公共(public) IP)我们可以做我想做的事?
编辑:确实,如果我这样做:
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
docker 主机 (br-[a-z0-9]+) 上的新接口(interface)采用“--gateway”IP,这是我的路由器 IP。并且在网络上的两台计算机上使用相同的 IP ... BOOM
提前致谢。
最佳答案
编辑:这个解决方案现在没用了。从 1.12 版本开始,Docker 提供了两个网络驱动程序:macvlan 和 ipvlan。它们允许从 LAN 网络分配静态 IP。见 answer below .
查找后people who have the same problem ,我们找到了一种解决方法:
总结:
- (V)LAN 为 192.168.1.0/24
- 默认网关(= 路由器)是 192.168.1.1
- 多个 Docker 主机
- 注意:我们有两个 NIC:eth0 和 eth1(专用于 Docker)
我们想要什么:
我们希望在没有任何 NAT/PAT/translation/port-forwarding/etc 的 192.168.1.0/24 网络中拥有 ip 容器(如计算机)...
问题
当这样做时:
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,这是我们的路由器。
解决方案
1。设置 Docker 网络
使用 DefaultGatewayIPv4
参数:
docker network create --subnet 192.168.1.0/24 --aux-address "DefaultGatewayIPv4=192.168.1.1" homenet
默认情况下,Docker 会给桥接接口(interface) (br-[a-z0-9]+
) 第一个 IP,该 IP 可能已经被另一台机器占用。解决方案是使用 --gateway
参数告诉 docker 分配任意 IP(可用):
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
来指定网桥名称。
2。架起桥梁!
现在我们有了一个由 Docker 创建的桥 (br-[a-z0-9]+
)。我们需要将它桥接到物理接口(interface)(在我的情况下,我必须连接到 NIC,所以我使用 eth1):
brctl addif br-home-net eth1
3。删除网桥IP
我们现在可以从网桥中删除 IP 地址,因为我们不需要:
ip a del 192.168.1.200/24 dev br-home-net
IP 192.168.1.200
可以用作多个 docker 主机上的桥接器,因为我们不使用它,我们将其移除。
关于networking - Docker 1.10 容器在局域网中的 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35742807/