需求

在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求。要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了。

下面我们就使用pipework工具来实现这一需求。

1、pipework的安装

Pipework是一个Docker配置工具,是一个开源项目,由200多行shell实现。

Pipework是一个集成工具,需要配合使用的两个工具是OpenvSwitch和Bridge-utils。

  1. $ git clone https://github.com/jpetazzo/pipework.git
  2. $ sudo cp pipework/pipework /usr/local/bin/

2、pipework配置Docker的三个简单场景

2.1  pipework+linux bridge:配置Docker单主机容器

  1. #主机A:192.168.187.143
  2. #主机A上创建两个容器con1、con2
  3. docker run -itd --name con1 --net=none ubuntu:14.04 bash
  4. docker run -itd --name con2 --net=none ubuntu:14.04 bash
  5.  
  6. #使用pipework建立网桥br0,为容器con1和con2添加新的网卡,并将它们连接到br0上
  7. pipework br0 con1 10.0.0.2/24
  8. pipework br0 con2 10.0.0.3/24
  9.  
  10. #在容器con1和con2内部可以看到有一个网卡地址分别如上,可以ping通

2.2  pipework+OVS:单主机Docker容器VLAN划分

pipework不仅可以使用Linux bridge连接Docker容器,还可以与OpenVswitch结合,实现Docker容器的VLAN划分。

  1. 1 #主机A的IP地址为:192.168.187.147
  2. 2 #在主机A上创建4个Docker容器,test1、test2、test3、test4
  3. 3
  4. 4 docker run -itd --name test1 --net=none busybox sh
  5. 5 docker run -itd --name test2 --net=none busybox sh
  6. 6 docker run -itd --name test3 --net=none busybox sh
  7. 7 docker run -itd --name test4 --net=none busybox sh
  8. 8
  9. 9 #将test1,test2划分到一个vlan中,vlan在mac地址后加@指定,此处mac地址省略
  10. 10 pipework ovs0 test1 192.168.0.1/24 @100
  11. 11 pipework ovs0 test2 192.168.0.2/24 @100
  12. 12
  13. 13 #将test3,test4划分到另一个vlan中
  14. 14 pipework ovs0 test3 192.168.0.3/24 @200
  15. 15 pipework ovs0 test4 192.168.0.4/24 @200
  16. 16
  17. 17 #此时进入容器test1
  18. 18 ping 10.0.0.2 #可以通信
  19. 19 ping 10.0.0.3 #不可以通信

这个功能其实是由于OpenVSwitch本身支持VLAN功能,在将veth pair的一端加入ovs0网桥时,指定了tag。底层的操作是

  1. ovs-vsctl add-port ovs0 veth* tag=100

2.3  pipework+OVS:多主机Docker容器VLAN划分

  1. 1 #主机A:192.168.187.147
  2. 2 #主机B:192.168.187.148
  3. 3
  4. 4 #主机A上
  5. 5 docker run -itd --net=none --name con1 busybox sh
  6. 6 docker run -itd --net=none --name con2 busybox sh
  7. 7
  8. 8 #划分vlan
  9. 9 pipework ovs con1 10.0.0.1/24 @100
  10. 10 pipework ovs con2 10.0.0.2/24 @200
  11. 11
  12. 12 #将eth0连接到ovs上
  13. 13 ovs-vsctl add-port ovs eth0
  14. 14
  15. 15 #同理在主机B上进行操作
  16. 16 docker run -itd --net=none --name con3 busybox sh
  17. 17 docker run -itd --net=none --name con4 busybox sh
  18. 18
  19. 19 #划分vlan
  20. 20 pipework ovs con3 10.0.0.3/24 @100
  21. 21 pipework ovs con4 10.0.0.4/24 @200
  22. 22
  23. 23 #将eth0连接到ovs上
  24. 24 ovs-vsctl add-port ovs eth0

遇到问题:

1)进入容器con3,我们期望的结果是可以ping通con1,但是不能ping通con2.但是实验发现都不能ping通。感觉跨主机划分vlan还是存在问题。

注:看到将eth0连接到ovs上另一种实现方式如下,但是试过了还是不能ping通

  1. 1 #主机A的IP地址为:192.168.187.147
  2. 2 ip addr add 192.168.187.147/24 dev ovs0
  3. 3 ip addr del 192.168.187.147/24 dev eth0
  4. 4 ovs-vsctl add-port ovs0 eth0
  5. 5 route del default
  6. 6 route add default gw 192.168.187.254 dev ovs0

2)如果不划分vlan的话,是可以跨主机通信的。

Docker使用pipework配置本地网络的更多相关文章

  1. Docker(二十三)-Docker使用pipework配置本地网络

    需求 在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了. 下 ...

  2. Redhat6.4 配置本地网络的FTP YUM源

    Redhat6.4 配置本地网络的FTP YUM源 如果本机IP: 192.168.8.47 (一) 配置本机的yum源 使用以下的方法能够配置本机的yum源: 1) scp命令上传ISO文件到: / ...

  3. 使用pipework将Docker容器桥接到本地网络环境中

    在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipew ...

  4. Oracle配置本地网络服务名

    Oracle安装完成后,可以使用客户端自带的的网络配置向导(Net Configuration Assistant)进行配置 1.启动Net Configuration Assistant.选择&qu ...

  5. OCA读书笔记(6) - 配置Oracle网络环境

    6.Configuring the Oracle Network Environment su - grid装grid时自动创建了监听netca--创建新的监听 vi $ORACLE_HOME/net ...

  6. 使用pipework将Docker容器配置到本地网络环境中

    使用pipework将Docker容器配置到本地网络环境中 需求 在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主 ...

  7. docker 配置桥接网络

    2.5 docker配置桥接网络(上): 为了使本地网络中的机器和Docker 容器更方便的通信,我们经常会有将Docker容器 配置到和主机同一网段的需求. 这个需求其实很容器实现, 我们只需要将D ...

  8. Docker学习(六): 网络使用与配置

    特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...

  9. linux配置oracle11G监听及本地网络服务 及 数据库建库

    配置监听及本地网络服务 在oracle用户的图形界面oracle用户中,新开启一个终端,输入命令netca 会弹出如下界面. 数据库建库 在oracle用户的图形界面oracle用户中,新开启一个终端 ...

随机推荐

  1. vue param和query两种传参方式

    1.传参方式 query传参方式 this.$router.push({ path: "/home", query: {code:"123"} }) param ...

  2. window open() 方法

    open() 方法用于打开一个新的浏览器窗口或查找一个已命名的窗口. 语法 window.open(URL,name,specs,replace) 参数 说明 URL 可选.打开指定的页面的URL.如 ...

  3. "Class does not support Automation or does not support expected interface"数据库连接错误问题分析与解决

    1,故障现象 本人编译的英文版程序在本机上运行OK,换台电脑运行,发现启动时连接数据库出错. 错误信息如下: --------------------------- Error start datab ...

  4. 「Django」Django内置email发送邮件

    Django内置email发送邮件 1.首先在settings.py文件设置相关参数 STATIC_URL = '/static/' # 设置邮件域名 EMAIL_HOST = 'smtp.163.c ...

  5. pycharm 头模板

    #!/usr/local/bin/python3 # -*- coding: utf-8 -*- """ @author: Ray @contact: raylively ...

  6. Security Study

    1.WebGoat http://www.owasp.org.cn/ 学习Web应用漏洞最好的教程----WebGoat http://blog.csdn.net/bill_lee_sh_cn/art ...

  7. C++编译错误--C++连接redis:编译错误error C2371: “off_t”: 重定义;不同的基类型

    编译错误:对于编译C++调用hiredis编译错误:error C2371: “off_t”: 重定义:不同的基类型,如下图: 可能的解决方案: 1. 因为hiredis预处理器定义了_OFF_T_D ...

  8. poj 2762

    Tarjan + TopsortTarjan 缩点Topsort 判断 Topsort 判断:在DAG中若初始状态下存在多于1个入度为0的点则说明这些 入度为0的点之间不会有路径可达若不存在入度为0的 ...

  9. [Luogu] 程序自动分析

    题面:https://www.luogu.org/problemnew/show/P1955 题解:https://www.zybuluo.com/wsndy-xx/note/1143858

  10. SPOJ GSS1 - Can you answer these queries I(线段树维护GSS)

    Can you answer these queries I SPOJ - GSS1 You are given a sequence A[1], A[2], -, A[N] . ( |A[i]| ≤ ...