Docker 手动配置容器网络实例详解

Docker 手动配置容器网络

docker容器的网络是net命名空间与虚拟设备的结合,容器在启动时会创建一对虚拟接口veth pair,这一对接口分别放到本地和容器中,在本地的veth会被分配类似vethxxxx的名称并被桥接到指定网桥的上(默认为docker0),可以通过brctl show命令查看网桥上挂载的接口,在容器中的veth会从网桥获取一个未使用地址,该veth的名称会被更改为eth0并配置默认路由到vethxxxx,docker允许在启动容器的时候通过--net参数指定不同的网络类型。

--net=bridge:默认值,桥接到默认的网桥。

--net=host:不将容器网络放到隔离的namespace,此时docker不会容器化容器内的网络,这样创建出来的容器使用的是本地的网络,拥有完全的本地主机接口访问权限。

--net=contianer:name_or_id:使用一个已经存在的容器的网络栈,共享已存在容器的ip地址和端口等网络资源。

--net=none:将新容器放到隔离的网络栈中,不进行网络配置,我们为容器配置网络需要指定该项。

我的环境 :操作系统---centos7,Docker版本---1.7,基础镜像---centos-6-x86_64.tar.gz

1. 启动容器

[black@test ~]$ docker run -it --rm --name=mynetwork --net=none centos:latest /bin/bash

在容器中查看网络设置,可以发现只有本地环回接口lo

[root@99abaecd79ab /]# ifconfig
lo    Link encap:Local Loopback
     inet addr:127.0.0.1 Mask:255.0.0.0
     inet6 addr: ::1/128 Scope:Host
     UP LOOPBACK RUNNING MTU:65536 Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0
     RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

2. 为容器创建net命名空间

[black@test ~]$ PID=$(docker inspect -f '{{.State.Pid}}' mynetwork)
[black@test ~]$ sudo mkdir -p /var/run/netns
[black@test ~]$ sudo ln -s /proc/$PID/ns/net /var/run/netns/$PID

3. 创建一对veth接口A和B,绑定A到自定义的网桥br0

[black@test ~]$ sudo ip link add A type veth peer name B
[black@test ~]$ sudo brctl addif br0 A
[black@test ~]$ sudo ip link set A up

4. 将B放入容器中,命名为eth0,启动并配置ip与默认网关

[black@test ~]$ sudo ip link set B netns $PID
[black@test ~]$ sudo ip netns exec $PID ip link set dev B name eth0
[black@test ~]$ sudo ip netns exec $PID ip link set eth0 up
[black@test ~]$ sudo ip netns exec $PID ip addr add 10.10.10.25/24 dev eth0   //ip与br0在同一网段中
[black@test ~]$ sudo ip netns exec $PID ip route add default via 10.10.10.10.1

在容器中查看容器的网络设置如下

[root@affbcb8747eb /]# ifconfig
eth0   Link encap:Ethernet Wadded D2:27:3D:9F:E8:AA
     inet addr:10.10.10.25 Bcast:0.0.0.0 Mask:255.255.255.0
     inet6 addr: fe80::d027:3dff:fe9f:e8aa/64 Scope:Link
     UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
     RX packets:8 errors:0 dropped:0 overruns:0 frame:0
     TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000
     RX bytes:648 (648.0 b) TX bytes:648 (648.0 b) 

lo    Link encap:Local Loopback
     inet addr:127.0.0.1 Mask:255.0.0.0
     inet6 addr: ::1/128 Scope:Host
     UP LOOPBACK RUNNING MTU:65536 Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:0
     RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持,

(0)

相关推荐

  • Docker为网络bridge模式指定容器ip的方法

    前言 众所周知bridge模式是Docker默认的网络设置,此模式会为每一个容器分配Network Namespace.设置IP等,并将一个主机上的Docker容器连接到一个虚拟网桥上.下面来看看Docker为网络bridge模式指定容器ip的方法. 实现方法 如果只是简单创建一个bridge模式的网络是无法给容器指定ip的 [root@vultrvpn conf.d]# docker network create --driver bridge wordpress_net ad1ff3d972

  • Docker网络代理设置详解

    背景 在一些实验室环境,服务器没有直接连接外网的权限,需要通过网络代理.我们通常会将网络代理直接配置在/etc/environment./etc/profile之类的配置文件中,这对于大部分操作都是可行的.然而,docker命令却使用不了这些代理. 比如docker pull时需要从外网下载镜像,就会出现如下错误: $ docker pull hello-world Unable to find image 'hello-world:latest' locally Pulling reposit

  • docker 学习笔记之docker连接网络的设置

    1.如果docker主机不需要通过代理连接外网 则docker的相关命令(如docker search)或docker容器与网络相关的操作都可以正常进行,不需要特殊设置. 2.当docker主机 是通过代理才能连接外网时,采用服务方式启动守护进程 如果docker守护进程是通过服务的方式启动的(sudo start docker) 当我们执行如  docker search ubuntu 命令时,会报错 Error response from daemon: Get https://index.

  • 详解Centos7 下建立 Docker 桥接网络

    前言 最近职业规划开始有了转变,在创业团队中一个人的角色不可能只有一个,说说我现在担任过的角色:配置管理,项目经理,售前技术支持,售后技术支持,测试,少许开发工作,产品策划:除了市场营销,其他杂七杂八的都干过了.最后我发现我最适合的职位也许是devops,这个岗位的工作内容请大家自行百度. 回正题,去年开始关注docker,直到今年看了坛子里的大神们对docker调研实践后,我决定也开始实践.就从改造公司研发和运维环境开始,这次的帖子主要是将自己构建docker桥接物理网络的过程讲述一遍,本来网

  • 详解Docker中VLAN网络模式的配置

    前言 Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络 方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求. Docker网络模式选择 目前已有不少文章介绍了Docker的网络模型,但是在实际应用中还是有不少坑和需要注意的点 在Docker应用到生产环境的时候,网络模型的选择主要有以下几种 1.原生Bridge NAT模式 2.Linux Bridge

  • Docker 网络命令详解

    •docker network create •docker network connect •docker network ls •docker network rm •docker network disconnect •docker network inspect 创建网络 zane@zane-V:~$ docker network create simple-network zane@zane-V:~$ docker network inspect simple-network { "N

  • Docker 网络模式(四种)详细介绍

    Docker 网络模式 本文首先介绍了Docker自身的4种网络工作方式, Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求. 四种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: · host模式,使用--net=h

  • Docker 手动配置容器网络实例详解

    Docker 手动配置容器网络 docker容器的网络是net命名空间与虚拟设备的结合,容器在启动时会创建一对虚拟接口veth pair,这一对接口分别放到本地和容器中,在本地的veth会被分配类似vethxxxx的名称并被桥接到指定网桥的上(默认为docker0),可以通过brctl show命令查看网桥上挂载的接口,在容器中的veth会从网桥获取一个未使用地址,该veth的名称会被更改为eth0并配置默认路由到vethxxxx,docker允许在启动容器的时候通过--net参数指定不同的网络

  • Linux Nginx 配置SSL访问实例详解

    Linux Nginx 配置SSL访问实例详解 生成证书 可以通过以下步骤生成一个简单的证书: 首先,进入你想创建证书和私钥的目录,例如: $ cd /usr/local/nginx/conf 创建服务器私钥,命令会让你输入一个口令: $ openssl genrsa -des3 -out server.key 1024 创建签名请求的证书(CSR): $ openssl req -new -key server.key -out server.csr 在加载SSL支持的Nginx并使用上述私钥

  • Docker 镜像和容器的区别详解

    最近学习Docker,被Docker 的镜像和容器搞的晕头转向,索性上网查找相关资料并整理下彻底的理解这块内容,有需要的小伙伴可以看下,少走点弯路. Docker的镜像和容器的区别 一.Docker镜像 要理解Docker镜像和Docker容器之间的区别,确实不容易. 假设Linux内核是第0层,那么无论怎么运行Docker,它都是运行于内核层之上的.这个Docker镜像,是一个只读的镜像,位于第1层,它不能被修改或不能保存状态. 一个Docker镜像可以构建于另一个Docker镜像之上,这种层

  • Java手动配置线程池过程详解

    线程池中,常见有涉及到的: ExecutorService executorService = Executors.newSingleThreadExecutor(); ExecutorService executorService1 = Executors.newCachedThreadPool(); ExecutorService executorService2 = Executors.newFixedThreadPool(3); 关于Executors和ExecutorService从记

  • MongoDB数据库安装配置、基本操作实例详解

    本文实例讲述了MongoDB数据库安装配置.基本操作.分享给大家供大家参考,具体如下: 1.简介 NO SQL:NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",是对不同于传统的关系数据库管理系统(RDBMS)的统称.NoSQL用于超大规模数据的存储,这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展. RDBMS NOSQL - 高度组织化结构化数据 - 结构化查询语言(SQL) - 数据和关系都存储在单独的表中. - 数据操纵语言,数据定

  • C#实现创建,删除,查找,配置虚拟目录实例详解

    本文实例讲述了C#实现创建,删除,查找,配置虚拟目录的方法.分享给大家供大家参考.具体如下: #region<<虚拟目录>> /// <summary> /// 创建虚拟目录 /// </summary> /// <param >虚拟目录别名</param> /// <param >内容所在路径</param> public static bool CreateVirtualDirectory(string w

  • .Net项目中NLog的配置和使用实例详解

    引言: 因为之前在项目开发中一直都是使用的Log4Net作为项目的日志记录框架,最近忽然感觉对它已经有点腻了,所以尝试着使用了NLog作为新项目的日志记录框架(当然作为一名有志向的攻城狮永远都不能只局限于眼前的技术,要不断的使用和学习新的技术).当然serilog也是一个不错的日志记录框架哟,不过今天主要还是要讲述的是NLog在项目中的配置和使用. NLog框架源码:https://github.com/NLog/NLog 一.导入NLog NuGet PackAge: 二.配置NLog 配置文

  • vue音乐播放器插件vue-aplayer的配置及其使用实例详解

    昨天在vue的官网上看到vue-aplayer这个音乐播放器的插件,由于个人有比较喜欢音乐,所以就拿过来玩一玩,感觉还是比较实用的,界面美观. 首先,我们先安装 npm install vue-aplayer --save ,之后在组件中引入  import VueAplayer from 'vue-aplayer',下面就是源码,可供参考: <template> <div> <div style="padding:10px 0;"> <a-p

  • Centos6 网络配置的实例详解

    Centos6 网络配置的实例详解 前言: 要实现永久的自定义IP或者更改DNS都需要修改配置文件,主要修改以下配置文件 /etc/sysconfig/network-scripts/ifcfg-ethX,其中ifcfg-ethX中的X代表第几块网卡,一般都是第一块,也就是ifcfg-eth0 下面是配置项目的讲解,这里展示的是自定义IP和DNS的配置文件 DEVICE=eth0#网卡设备名称 TYPE=Ethernet#网卡类型 UUID=06c04617-25d9-4a88-aab0-d8f

  • Docker Swarm入门实例详解

    Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 Docker 的一个子命令.目前,Swarm 是 Docker 社区提供的唯一一个原生支持 Docker 集群管理的工具.它可以把多个 Docker 主机组成的系统转换为单一的虚拟 Docker 主机,使得容器可以组成跨主机的子网网络. 1. Swarm 认识 Swarm 是目前 Docker 官方唯一指定(绑定)的集群管理工具.Docker 1.

随机推荐