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/24@192.168.184.2
重点: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
转载于:https://blog.51cto.com/zhaoyfcomeon/1968886