# 主機環境 ubuntu server 14.04,虛擬機
# eth1:192.168.56.101
# eth2: 192.168.58.101
# 192.168.56.0/24 管理網絡
# 192.168.58.0/24 數據網絡,容器使用的網絡
# 切換到 root 用戶執行如下命令
一、配置 Linux Bridge
brctl addbr br100
ip addr add 192.168.58.110/24 dev br100 # 給橋設置一個 IP,這樣主機能夠直接訪問容器
ip link set dev br100 up
二、配置 Docker 守護進程
echo 'DOCKER_OPTS="-b=br100"' >> /etc/default/docker
sudo service docker start
三、啓動容器,設置網絡模式爲 none,本身配置容器網絡
sudo docker run -it --net=none ubuntu:14.04 /bin/bash
四、查看容器進程 id
docker inspect -f '{{.State.Pid}}’ CONTAINER_ID
pid=xxx
五、建立 namespaces 的目錄
mkdir -p /var/run/netns
ln -s /proc/$pid/ns/net /var/run/netns/$pid
六、建立 veth 設備,分配給容器,綁定到橋
ip link add vetha type veth peer name vethb
brctl addif br100 vethb
ip link set vethb up
ip link set vetha netns $pid
ip netns exec $pid ip link set dev vetha name eth0
ip netns exec $pid ip link set eth0 up
ip netns exec $pid ip addr add 192.168.58.121/24 dev eth0
ip netns exec $pid ip route add default via 192.168.58.110
七、綁定 eth2 到 橋
brctl addif br100 eth2
ip addr del 192.168.58.101/24 dev eth2 # 刪除 eth2 的 IP
ip addr add 192.168.58.101/24 dev br100 # 把 eth2 的 IP 加到 橋中
Complete!!!