Docker配置container与host使用同一子网
Thu, Jul 10, 2014场景
Docker的一般使用场景是在container中运行应用, 然后将应用的端口映射到host的端口上
本文描述的场景是一种特殊的场景, 即container在host的网络上有单独的IP
参考
步骤
如参考中Integrate Docker Containers into your Host Network
一节描述的, 让container融入host网络的方法是 将docker在host上使用的bridge的IP修改为host网络的IP.
但此时host上就有两个设备(原设备和bridge)使用同一个网段,造成故障. 需要将原设备的master设为bridge
1. 停掉docker, 删掉原有的bridge docker0
> service docker stop
> ifconfig docker0 down
> brctl delbr docker0
2. 添加新的bridge bridge0
, 绑定在host网段的ip
> brctl addbr bridge0
> ip addr add 192.168.1.99/24 dev bridge0
3. 将原设备(设为eth0
)的master设为bridge0
参考上使用的命令是ip link set eth0 master bridge0
, 但在有些系统上会碰到错误:
Error: either "dev" is duplicate, or "master" is a garbage.
可以使用
> brctl addif bridge0 eth0
4. 从原设备eth0
上卸下原有ip, 启用bridge0
> ip addr del 192.168.1.99/24 dev eth0
> ifconfig bridge0 up
5. 启动docker
/usr/bin/docker -d -b=bridge0
6. 搞定.
如果遇到container无法ping
到其他ip, 记得检查host上的gateway, 以及host上的防火墙