轉載請註明來自:http://blog.csdn.net/wsscy2004linux
Docker使用linux橋接,在主機虛擬一個docker0
網絡接口,在主機中運行命令查看:git
# List host bridges $ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no # Show docker0 IP address $ sudo ifconfig docker0docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
docker啓動一個container時會會根據docker0
的網段劃分container的IP,docker0
是每一個container的網關。github
儘管docker在使用linux brigde會找最合適的。可是有時候咱們仍是須要本身規劃。
使用-b=<bridgename>
參數設置web
# 先關閉docker $ sudo service docker stop # 關閉網橋docker0# 添加本身的網橋bridge0 $ sudo ifconfig docker0 down $ sudo brctl addbr bridge0 $ sudo ifconfig bridge0 192.168.227.1 netmask 255.255.255.0 # 向Docker startup file中添加啓動自定義網橋參數 $ echo "DOCKER_OPTS=\"-b=bridge0\"" >> /etc/default/docker # 啓動Docker $ sudo service docker start # 查看自定義網橋是否啓動成功,ip等配置是否正確 $ sudo ifconfig bridge0 bridge0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.227.1 Bcast:192.168.227.255 Mask:255.255.255.0 # 啓動container docker run -i -t base /bin/bash # 能夠看到Container IP 在網段192.168.227/24內 root@261c272cd7d5:/# ifconfig eth0 eth0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:192.168.227.5 Bcast:192.168.227.255 Mask:255.255.255.0 # bridge0 IP as the default gateway# 查看路由信息 root@261c272cd7d5:/# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.227.1 0.0.0.0 UG 0 0 0 eth0 192.168.227.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 # hits CTRL+P then CTRL+Q to detach # 查看網橋信息 $ sudo brctl show bridge name bridge id STP enabled interfaces bridge0 8000.fe7c2e0faebd no vethAQI2QT
docker默認是容許container互通,經過-icc=false
關閉互通。
一旦關閉了互通,只能經過-link name:alias
命令鏈接指定container.redis
container互相隔離的狀況下,假設咱們有一個webapp container,一個redis contianer須要互通。
先啓動redis container:docker
sudo docker run -d --name redis crosbymichael/redis
再啓動webapp並聯通到redisubuntu
#將redis取別名爲dbsudo docker run -t -i --link redis:db --name webapp ubuntu bash
在webapp中能夠看到db的網絡信息:bash
$ root@4c01db0b339c:/# env HOSTNAME=4c01db0b339c DB_NAME=/webapp/db TERM=xterm DB_PORT=tcp://172.17.0.8:6379 DB_PORT_6379_TCP=tcp://172.17.0.8:6379 DB_PORT_6379_TCP_PROTO=tcp DB_PORT_6379_TCP_ADDR=172.17.0.8 DB_PORT_6379_TCP_PORT=6379 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin PWD=/ SHLVL=1 HOME=/ container=lxc _=/usr/bin/env root@4c01db0b339c:/#
0.11版本之後,-- link redis:db
的別名,會在/etc/hosts
中生成對應的ip映射:網絡
root@6541a75d44a0:/# cat /etc/hosts172.17.0.3 6541a75d44a0172.17.0.2 db
# 查看網橋信息 $ sudo brctl show bridge name bridge id STP enabled interfaces docker0 8000.fe7c2e0faebd no vethAQI2QT
vethxxx是主機與container內部eth0相連的管道。詳見ip link
和namespaces infrastructure
app
pipework
能夠建立各類複雜的containers互通的場景。詳見here