centos7 docker宿主機配置橋接物理網絡終極實戰
1、停止docker daemon,並刪除docker0
systemctl stop docker.service ip link set dev docker0 down brctl delbr docker0
2、創建橋接物理網絡:
2.1、思路整理
(1)新建br0橋接網絡,brctl show可以查看(需安裝bridge-utils)
(2)將宿主機物理網卡IP、掩碼、網關、dns(或者dhcp)配置到br0上
(3)刪除宿主機物理網卡IP、掩碼、網關、dns(或者dhcp)配置
(4)將宿主機物理網卡加入到br0
2.2、配置實戰
思路可以有一個,但是方案必須要有多種,此處列舉兩個方案
2.2.1、更改網卡配置文件實現(推薦)
此方案見本人另外一篇博客:
http://zhaoyfcomeon.blog.51cto.com/8429349/1968869
2.2.2、bctrl and ip命令實現
brctl addbr br0 ip link set dev br0 up ip addr add 192.168.184.100/24 dev br0 #爲br0分配物理網絡中的ip地址 ip addr del 192.168.184.99/24 dev ens0 #將宿主機網卡的IP清空 brctl addif br0 ens0 #將宿主機網卡掛到br0上 ip route del default #刪除原路由 ip route add default via 192.168.184.2 dev br0 #爲br0設置路由
3、設置docker服務啓動參數
這裏要注意的是,不同的linux操作系統docker的配置文件所在不同
centos 在/etc/sysconfig/docker
其他操作系統請前往下面的網址
https://docs.docker.com/installation/#installation
vim /etc/sysconfig/docker 在OPTIONS='--selinux-enabled'這行中修改爲 OPTIONS='--selinux-enabled -b=br0' 即讓docker服務啓動時使用br0網卡進行橋接
4、啓動docker服務
systemctl start docker systemctl status docker
5、安裝pipework
git clone https://github.com/jpetazzo/pipework cp ~/pipework/pipework /usr/local/bin/
6、啓動一個none網絡驅動的容器
這裏最好不要讓docker自動獲取ip,下次啓動會有變化而且自動獲取的ip可能會和物理網段中的ip衝突
docker run -itd --net=none --name=test centos /bin/bash
7、爲test容器設置一個與橋接物理網絡同地址段的ip@網關
方法有兩種,思路和原理是一樣的
7.1、使用pipework工具,此工具是shell腳本
pipework br0 test 192.168.184.11/[email protected]
重點:pepework操作內容:
查看主機中是否存在br0網橋、不存在就創建;
向test中加入一塊名爲eth1的網卡,並配置IP地址爲192.168.184.11/24
若test中已經有默認路由,則刪掉,把192.168.184.2設爲默認路由的網關;
將test容器連接到之前創建的br0上。
7.2、使用ip命令
配置使ip命令可以控制c4容器的network namespace docker inspect --format "{{ .State.Pid }}" c4 467 ln -s /proc/467/ns/net /var/run/netns/467 配置虛擬網卡對 ip link add veth-a type veth peer name veth-b 將veth-a添加到br0網橋中 brctl addif br0 veth-a ip link set veth-a up 將veth-b添加到容器中 ip link set veth-b netns 467 更改veth-b在容器中的名字 ip netns exec 467 ip link set veth-b name eth0 ip netns exec 467 ip link set eth0 up ip netns exec 467 ip addr add 9.115.211.30/24 dev eth0 ip netns exec 467 ip route add default via 9.115.211.1 容器的dns是同步的宿主機/etc/resolv.con的配置
8、進入容器查看ip
docker exec -it test /bin/bash