今天介绍如何在redhat/centos7系列机器上使用pipework为docker启动的容器指定一个固定ip,我们知道默认情况下,docker会使用

bridge网络模式为每一个启动的容器动态分配一个IP,以172.17.0.1为网关,172.17.0.2,172.17.0.3依次类推作为容器的ip,这样也算是

每个容器有了ip,当下次启动多个容器的时候IP还是会按照这种方式分配,表面上还是一个固定IP的方式,但是这种方式对容器启动顺序

有严格的要求。还有一种方式就是通过人为指定IP的方式,这种方式就是今天讲的利用pipework为容器指定IP。

启动容器时可以通过--net=none指定容器网络模式。有四种网络模式可以选择:host,container,none,bridge(默认),如果不设置这个参数,

那么默认就是bridge的模式,采用dhcp的方式分配IP。使用pipework为容器指定ip,对宿主机有要求,需要宿主机有网桥,对redhat7可以

使用yum install bridge-utils来安装网桥,安装完成之后设置网桥的IP就可以了。

下面一步一步来通过pipework为docker容器指定ip(前提是机器上已经安装了docker服务,并且服务开启,有镜像可使用):

第一步、安装网桥设备;

yum install -y bridge-utils

安装完毕即可在命令行下通过brctl 命令查看网桥

第二步、设置网络地址,我们假定宿主机是固定IP,并设置了网关;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
vi /etc/sysconfig/network-scripts/ifcfg-eno16777728
 
TYPE=Ethernet
 
BOOTPROTO=none
 
DEFROUTE=yes
 
PEERROUTES=yes
 
PEERDNS=yes
 
NAME=eno16777728
 
UUID=00f2e830-ed07-4ace-9e54-56a325e3a690
 
ONBOOT=yes
 
#IPADDR0=192.168.61.150
 
#PREFIX0=24
 
#GATEWAY0=192.168.61.2
 
#DNS1=192.168.61.2
 
HWADDR=00:0C:29:F7:22:81
 
BRIDGE="br-ex"
 
vi /etc/sysconfig/network-scripts/ifcfg-br-ex
 
TYPE=Bridge
 
BOOTPROTO=static
 
IPADDR=192.168.61.150
 
NETMASK=255.255.255.0
 
GATEWAY=192.168.61.2
 
PREFIX=24
 
DNS1=192.168.61.2
 
NAME=br-ex
 
ONBOOT=yes
 
DEVICE=br-ex

以上修改即为设置IP,设置完毕可以通过命令service network restart重启网络

1
2
3
4
5
6
7
8
9
[root@docker ~]# brctl show
 
bridge name bridge id STP enabled interfaces
 
br-ex 8000.000c29f72281 no eno16777728
 
veth1pl90365
 
docker0 8000.0242dda719e2 no

第三步、启动docker容器并指定网络模式为none

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@docker ~]# docker images
 
REPOSITORY TAG IMAGE ID CREATED SIZE
 
docker.io/zookeeper latest 19604ac4a163 Less than a second ago 143 MB
 
redis latest 07818b5b6de8 8 hours ago 482.9 MB
 
[root@docker ~]# docker run -it -d --net=none --name ip-test redis /bin/bash
 
[root@docker ~]# docker ps
 
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
 
4190f301a367 redis "/bin/bash" 55 minutes ago Up 55 minutes ip-test

第四步、获取pipework可执行程序

1
2
3
4
5
6
7
8
9
10
11
[root@docker ~]# git clone https://github.com/jpetazzo/pipework.git
 
[root@docker ~]# cd pipework/
 
[root@docker pipework]# ls
 
docker-compose.yml doctoc LICENSE pipework pipework.spec README.md
 
[root@docker ~]# cd ..
 
[root@docker ~]# cp -rp pipework/pipework /usr/local/bin

第五步、设置docker容器IP

1
[root@docker ~]# pipework br-ex ip-test 192.168.61.100/24@192.168.61.2

第六步、验证IP设置是否正确

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@docker ~]# ping 192.168.61.100
 
PING 192.168.61.100 (192.168.61.100) 56(84) bytes of data.
 
64 bytes from 192.168.61.100: icmp_seq=1 ttl=64 time=0.206 ms
 
64 bytes from 192.168.61.100: icmp_seq=2 ttl=64 time=0.081 ms
 
^C
 
--- 192.168.61.100 ping statistics ---
 
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
 
rtt min/avg/max/mdev = 0.081/0.143/0.206/0.063 ms

补充:

1、设置宿主机网桥IP地址的时候就是将原来网卡eno16777728的固定IP地址设置到br-ex网桥上,把网卡eno16777728IP和网关子网掩码

等都注释掉。有的机器上网卡可能叫eno16777736,根据具体网卡来修改配置文件。

2、网桥br-ex的名字可以随便叫,叫br0也可以,就是对应配置文件名称就必须是ifcfg-br0,类型为Bridge。

3、网桥设置的网关,我的机器是192.168.61.2,这个是安装虚拟机时vm默认设置的,有的机器网关为192.168.xx.1,最后对docker容器设置

IP时需要指定192.168.xx.yy/24@192.168.xx.1,@后面就是指定宿主机的网关,这里一定要注意,否则网络不通。

利用pipework为docker容器设置固定IP的更多相关文章

  1. 转:为Docker容器设置固定IP实现网络联通(1)——通过Pipework为Docker容器设置

    https://blog.csdn.net/chinagissoft/article/details/51250839 1. 创建并启动一个容器: docker run --cap-add=NET_A ...

  2. 为docker容器设置独立ip

    docker 1.12使用新版macvlan设置与宿主机同网段ip ****************************************** 由于开发的一些特殊需求,需要将容器部署在与宿主 ...

  3. 为Docker容器设置静态IP

    此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 创建docker容器 docker run -it --name=yh -h yh --net=none de ...

  4. 为Docker容器配置固定IP

    当docker以桥接的方式启动容器时,容器内部的IP是经过DHCP获取的,例如:172.17.0.8/32,且每重启依次IP都会发生变动.某些特殊的情况下,需要容器内有自己固定的一个内部IP.我的实现 ...

  5. docker设置固定ip地址

    Docker安装后,默认会创建下面三种网络类型 $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge ...

  6. Docker实现容器具有固定IP

    Docker的网络类型 Docker安装后,默认会创建三种网络 $ docker network ls NETWORK ID NAME DRIVER SCOPE 6bdc00ad2a8d bridge ...

  7. docker 设置固定ip、配置网络

    Docker安装后,默认会创建下面三种网络类型 $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge ...

  8. docker容器配置独立ip

    一般安装docker后都会通过端口转发的方式使用网络,比如 “-p 2294:22” 就将2294抓发到22端口来提供sftp服务,这样使用起来没有问题.但端口号很难记忆,如果前边有nginx等抓发工 ...

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

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

随机推荐

  1. Invalid Django TIME_ZONE

    在linux操作系统运行,设置的时区在系统文件/usr/share/zoneinfo/中找不到会出现以下错误 raceback (most recent call last): File , in & ...

  2. Golang- import 导入包的几种方式:点,别名与下划线

    包的导入语法 在写Go代码的时候经常用到import这个命令用来导入包文件,看到的方式参考如下: import( "fmt" ) 然后在代码里面可以通过如下的方式调用 fmt.Pr ...

  3. caoz的梦呓:信息安全,别为了芝麻丢了西瓜

    猫宁!!! 参考链接:https://mp.weixin.qq.com/s/z6UI-tdhN1CGdqQQuglLVQ 对方公众号:caoz的梦呓 我之前写微博的时候,经常就有读者反馈说,你怎么用3 ...

  4. 配置传统vlan间路由

    S1#SH RUN spanning-tree mode pvst ! interface FastEthernet0/1 switchport access vlan 10 switchport m ...

  5. ssh隧道详解与案例利用讲解

    原文阅读:https://www.52stu.org/?p=206 你是否有过自己身处内网,却想整个远控上线?你是否有过身处目标内网,却想把目标的内网的Linux的ssh转发出来?你是否想过穿透多层网 ...

  6. C学习笔记-文件操作

    文件操作大致分三步 打开文件 读写文件 关闭文件 二进制和文本模式的区别 在windows系统中,文本模式下,文件以"\r\n"代表换行.若以文本模式打开文件,并用fputs等函数 ...

  7. ABC143F Distinct Numbers

    这道题非常好.其思想类似于 $O(n \log n)$ 求最长上升子序列的算法. hint:考虑固定操作次数 $o$,$k$ 最大可取到多少? int n; scan(n); vi a(n); sca ...

  8. 小白学习django第六站-http相关

    请求与相应 HttpRequest对象API def home(request): print('path:', request.path) print('mothod:', request.meth ...

  9. js数据结构-链表

    链表和数组 大家都用过js中的数组,数组其实是一种线性表的顺序存储结构,它的特点是用一组地址连续的存储单元依次存储数据元素.而它的缺点也正是其特点而造成,比如对数组做删除或者插入的时候,可能需要移动大 ...

  10. python网络爬虫(9)构建基础爬虫思路

    目的意义 基础爬虫分5个模块,使用多个文件相互配合,实现一个相对完善的数据爬取方案,便于以后更完善的爬虫做准备. 这里目的是爬取200条百度百科信息,并生成一个html文件,存储爬取的站点,词条,解释 ...