利用pipework为docker容器设置固定IP
今天介绍如何在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-eno16777728TYPE=EthernetBOOTPROTO=noneDEFROUTE=yesPEERROUTES=yesPEERDNS=yesNAME=eno16777728UUID=00f2e830-ed07-4ace-9e54-56a325e3a690ONBOOT=yes#IPADDR0=192.168.61.150#PREFIX0=24#GATEWAY0=192.168.61.2#DNS1=192.168.61.2HWADDR=00:0C:29:F7:22:81BRIDGE="br-ex"vi /etc/sysconfig/network-scripts/ifcfg-br-exTYPE=BridgeBOOTPROTO=staticIPADDR=192.168.61.150NETMASK=255.255.255.0GATEWAY=192.168.61.2PREFIX=24DNS1=192.168.61.2NAME=br-exONBOOT=yesDEVICE=br-ex |
以上修改即为设置IP,设置完毕可以通过命令service network restart重启网络
|
1
2
3
4
5
6
7
8
9
|
[root@docker ~]# brctl showbridge name bridge id STP enabled interfacesbr-ex 8000.000c29f72281 no eno16777728veth1pl90365docker0 8000.0242dda719e2 no |
第三步、启动docker容器并指定网络模式为none
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@docker ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEdocker.io/zookeeper latest 19604ac4a163 Less than a second ago 143 MBredis 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 psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4190f301a367 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]# lsdocker-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.100PING 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 ms64 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 1001msrtt 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的更多相关文章
- 转:为Docker容器设置固定IP实现网络联通(1)——通过Pipework为Docker容器设置
https://blog.csdn.net/chinagissoft/article/details/51250839 1. 创建并启动一个容器: docker run --cap-add=NET_A ...
- 为docker容器设置独立ip
docker 1.12使用新版macvlan设置与宿主机同网段ip ****************************************** 由于开发的一些特殊需求,需要将容器部署在与宿主 ...
- 为Docker容器设置静态IP
此文已由作者袁欢授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 创建docker容器 docker run -it --name=yh -h yh --net=none de ...
- 为Docker容器配置固定IP
当docker以桥接的方式启动容器时,容器内部的IP是经过DHCP获取的,例如:172.17.0.8/32,且每重启依次IP都会发生变动.某些特殊的情况下,需要容器内有自己固定的一个内部IP.我的实现 ...
- docker设置固定ip地址
Docker安装后,默认会创建下面三种网络类型 $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge ...
- Docker实现容器具有固定IP
Docker的网络类型 Docker安装后,默认会创建三种网络 $ docker network ls NETWORK ID NAME DRIVER SCOPE 6bdc00ad2a8d bridge ...
- docker 设置固定ip、配置网络
Docker安装后,默认会创建下面三种网络类型 $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge ...
- docker容器配置独立ip
一般安装docker后都会通过端口转发的方式使用网络,比如 “-p 2294:22” 就将2294抓发到22端口来提供sftp服务,这样使用起来没有问题.但端口号很难记忆,如果前边有nginx等抓发工 ...
- 使用pipework将Docker容器桥接到本地网络环境中
在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipew ...
随机推荐
- elasticsearch-head-master下运行npm install报npm WARN elasticsearch-head@0.0.0 license should be a valid SPDX license expression
2个月没有启动es和es配套服务,今天运行时,发现如下问题: 运行npm install 出现npm WARN elasticsearch-head@0.0.0 license should be a ...
- StringRedisTemplate与RedisTemplate区别
StringRedisTemplate与RedisTemplate两者的关系是StringRedisTemplate继承RedisTemplate. 两者的数据是不共通的:也就是说StringRedi ...
- 串的应用与kmp算法讲解--学习笔记
串的应用与kmp算法讲解 1. 写作目的 平时学习总结的学习笔记,方便自己理解加深印象.同时希望可以帮到正在学习这方面知识的同学,可以相互学习.新手上路请多关照,如果问题还请不吝赐教. 2. 串的逻辑 ...
- Python面试-websocket及web框架
一.Websocket 1. websocket概念 在讲websocket之前,我们先来看看ajax轮询和long poll的实现机制. A. ajax轮询 ajax轮询的原理非常简单,让浏览器隔 ...
- 学习ansible笔记1
ansible的特点: -- 模块化设计 -- 仅需要ssh和Python即可以使用 -- 无客户端 -- 功能强大,模块丰富 -- 上手容易门槛低 -- 基于python开发,做二次开发更容易 -- ...
- 统计学习方法 | 第1章 统计学习方法概论 | np.random.rand()函数
np.random.rand()函数 语法: np.random.rand(d0,d1,d2……dn) 注:使用方法与np.random.randn()函数相同 作用: 通过本函数可以返回一个或一组服 ...
- group_by和having的用法
#encoding: utf-8 from sqlalchemy import create_engine,Column,Integer,String,Float,func,and_,or_,Enum ...
- 【转贴】Windows virtio 驱动
Windows virtio 驱动 https://blog.51cto.com/dangzhiqiang/1833615 去年去中建总部的时候用过. 发现很多搞openstack的人都不清楚这一块的 ...
- 内存溢出之PermGen space异常解决
1.出现的异常: java.lang.OutOfMemoryError: PermGen space at sun.misc.Launcher$ExtClassLoader.getExtClassLo ...
- 12306 的架构也太 "牛X" 了吧!
每到节假日期间,一二线城市返乡.外出游玩的人们几乎都面临着一个问题:抢火车票! 虽然现在大多数情况下都能订到票,但是放票瞬间即无票的场景,相信大家都深有体会.尤其是春节期间,大家不仅使用12306,还 ...