为什么要让docker桥接物理网络?

docker默认提供了一个隔离的内网环境,启动时会建立一个docker0的虚拟网卡,每个容器都是连接到docker0网卡上的。而docker0的ip段为172.17.0.1,若想让容器与宿主机同一网段的其他机器访问,就必须在启动docker的时候将某个端口映射到宿主机的端口上才行,例如:docker run -itd -p 22 centos。这是我们所不能接受的,想想每个应用都要绞尽脑汁的去设置端口,因为不能重复,如果应用有多端口那更是不堪设想啊。所以为了让容器与宿主机同一个网段,我们需要建立自己的桥接网络。

centos7宿主机上建立Docker桥接物理网络过程

宿主机网卡信息:
name:eno16777736
IP:192.168.0.70
GATEWAY:192.168.0.1
DNS:114.114.114.114

1. 停止docker服务

~#:service docker stop

2.删除docker0网卡

~#:ip link set dev docker0 down
~#:brctl delbr docker0

3.新建桥接物理网络虚拟网卡br0

~#:brctl addbr br0
~#:ip link set dev br0 up
~#:ip addr add 192.168.0.71/24 dev br0 #为br0分配物理网络中的ip地址
~#:ip addr del 192.168.0.70/24 dev eno16777736 #将宿主机网卡的IP清空
~#:brctl addif br0 eno16777736 #将宿主机网卡挂到br0上 (若xshell端操作会断开,需进入vmware虚拟机进行操作)
~#:ip route add default via 192.168.0.1 dev br0 #为br0设置路由

4.设置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网卡进行桥接

5.启动docker服务

~#:service docker start

6.安装pipework

~#:git clone https://github.com/jpetazzo/pipework
~#:cp ~/pipework/pipework /usr/local/bin/

7.启动一个手动设置网络的容器
这里最好不要让docker自动获取ip,下次启动会有变化而且自动获取的ip可能会和物理网段中的ip冲突

~#:docker run -itd --net=none --name=weifeng centos /bin/bash

9.为weifeng容器设置一个与桥接物理网络同地址段的ip@网关

~#:pipework br0 weifeng 192.168.0.11/24@192.168.0.1

10.进入容器查看ip

~#:docker exec -it weifeng /bin/bash

[root@aa02eef3da60 /]# yum install -y net-tools

[root@aa02eef3da60 /]# ifconfig

eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.0.11  netmask 255.255.255.0  broadcast 192.168.0.255

inet6 fe80::1451:5fff:fe49:fc67  prefixlen 64  scopeid 0x20<link>

ether 16:51:5f:49:fc:67  txqueuelen 1000  (Ethernet)

RX packets 4359  bytes 15003532 (14.3 MiB)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 3517  bytes 243282 (237.5 KiB)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536

inet 127.0.0.1  netmask 255.0.0.0

inet6 ::1  prefixlen 128  scopeid 0x10<host>

loop  txqueuelen 0  (Local Loopback)

RX packets 0  bytes 0 (0.0 B)

RX errors 0  dropped 0  overruns 0  frame 0

TX packets 0  bytes 0 (0.0 B)

TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


参考文章:https://testerhome.com/topics/2648
												

Docker Centos7 下建立 Docker 桥接网络的更多相关文章

  1. Docker Centos6 下建立 Docker 桥接网络

    cd /etc/sysconfig/network-scripts/; cp ifcfg-eth0  ifcfg-br0 vi ifcfg-eth0 //增加BRIDGE=br0,删除IPADDR,N ...

  2. docker(一) Centos7下安装docker

    docker(一) Centos7下安装dockerdocker(二) windows10下安装dockerdocker(三) 镜像和容器常用命令 docker(四) 使用Dockerfile构建镜像 ...

  3. Centos7下卸载docker

    最近发现某台机器上的Docker服务无法开启,报如下错误: [root@localhost ~]# docker ps -a Cannot connect to the Docker daemon. ...

  4. CentOS7下安装docker(Docker系列1)

    CentOS7下安装docker 系统要求 为了安装docker,需要准备 64-bit的CentOS 7 删除非官方的Docker包 yum的仓库中有一个很旧的Docker包, 现在Docker官方 ...

  5. centos7下安装docker与镜像加速

    1.背景 centos7下安装docker 2.安装 第一步:检查是否为centos7版本 第二步:依赖环境安装 执行如下两个命令: yum -y install gcc yum -y install ...

  6. centos7下安装docker(12.5容器在单个host上的网络总结)

    单个host上的容器的网络:通过本章的学习,我们知道docker默认有三种网络,可以通过docker network ls查看: none:封闭的网络,通过--network=none来指定: hos ...

  7. centos7下安装docker(15.7容器跨主机网络---calico)

    Calico是一个纯三层的虚拟网络方案,Calico为每个容器分配一个IP,每个host都是router,把不同host的容器连接起来.与vxlan不同的是:calico不对数据包进行封装,不需要NA ...

  8. centos7下安装docker(15.5容器跨主机网络--flanneld)

    flannel是由CoreOS研究的一种覆盖网络(overlay network)网络工具,目的是帮助每一个host主机有一个完整的子网: 功能是:让集群中不同节点的主机创建的容器都有一个唯一的虚拟I ...

  9. centos7下安装docker(15.1跨主机网络)

    之前学习了单个host上的网络,我们知道单个host上的网络有:none,host,bridge和joined,他们解决了单个host上面的容器通信的问题:接下来我们讨论跨主机间容器通信的方案 跨主机 ...

随机推荐

  1. 获取select中的值

    分别使用javascript原生的方法和jquery方法<select id="test" name=""> <option value=&q ...

  2. 邓_phpcms_二次开发_留言板

    ================================================================= •在 phpcms/modules 目录下创建文件夹,并将其命名为g ...

  3. 用Java 实现一个表中的数据复制到另一个表中

    string sql = "insert into tbl1(s1,s2,s3) select t.t1,t.t2,t.t3 from tab2 t";再用jdbc或者hibern ...

  4. RPC架构简单理解

    RPC(Remote Promote Call) 一种进程间通信方式.允许像调用本地服务一样调用远程服务. RPC框架的主要目标就是让远程服务调用更简单.透明.RPC框架负责屏蔽底层的传输方式(TCP ...

  5. CCF系列之数位之和(201512-1)

    试题编号: 201512-1试题名称: 数位之和时间限制: 1.0s内存限制: 256.0MB问题描述: 问题描述 给定一个十进制整数n,输出n的各位数字之和. 输入格式 输入一个整数n. 输出格式 ...

  6. linu_nginx_location语法

    location的作用是什么? 每个server中都需要配置location,通过location匹配域名后内容,再通过location响应同一个域名下不同请求 location语法 location ...

  7. Linux修改主机名脚本-不重启-支持RedHat、SUSE

    需要用脚本修改主机名,涉及RedHat.SUSE系统,并且要求修改立即生效且不重启,下面就是我的脚本. 使用脚本的方法如下: 1 首先创建一个脚本文件,假如命名为ModifyHostname.sh: ...

  8. php中HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR的使用

    1.REMOTE_ADDR:浏览当前页面的用户计算机的ip地址2.HTTP_X_FORWARDED_FOR: 浏览当前页面的用户计算机的网关3.HTTP_CLIENT_IP:客户端的ip 在PHP 中 ...

  9. tcpdump 使用

    例子: 首先切换到root用户 tcpdump -w  aaa.cap   -i eth7   -nn -x  'port  9999'  -c  1 以例子说明参数: -w:输出到文件aaa.cap ...

  10. PHP读取XML文件

    xml主键被json取代,大概了解一下就OK了 简要: 加载xml文件:$xml = simplexml_load_file('sa.xml');//$xml是一个对象 读取节点:echo $xml- ...