docker Pipework配置宿主机和docker实例的IP在同一个网段

摘要: 本文讲的是Docker使用自定义网桥docker,并且自定义容器的ip地址。 Docker 服务默认会创建一个 docker0 网桥,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。 用户也可以指定网桥来连接各个容器。


Docker 服务默认会创建一个 docker0 网桥,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。

一、设置网络桥接,步骤如下

1. 首先安装bridge-utils工具包

$ yum install bridge-utils

然后可以用 “brctl show” 来查看当前网桥信息,可以看到目前只有一个 docker0

$ brctl show

bridge name bridge id STP enabled interfaces

docker0 8000.56847afe9799 no

2. 然后创建一个网桥 br0

$ vim /etc/sysconfig/network-scripts/ifcfg-br0

DEVICE="br0"

ONBOOT="yes"

TYPE="Bridge"

BOOTPROTO="static"

IPADDR="192.168.31.154"

NETMASK="255.255.255.0"

GATEWAY="192.168.31.1"

DEFROUTE="yes"

NM_CONTROLLED="no"

3. 编辑vim /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0

TYPE=Ethernet

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=none

BRIDGE=br0

4. 编辑 /etc/sysconfig/docker 文件,添加如下Docker参数,是Docker默认使用上面新添加的网桥

other_args="-b br0"

5. 重启网络服务

$ service docker restart

6. 查看配置

$ brctl show

bridge name bridge id STP enabled interfaces

br0 8000.000c29e7dd97 no eth0

新建一个容器,可以看到它已经桥接到了 br0 上了。

6. 最后,如果要删除网桥,执行下边的命令

$ ip link set dev br0 down

$ brctl addbr br0


二、 Pipework 配置Docker固定IP

我们在自定义网桥的基础上去做固定IP配置,Pipework有个缺点就是给容器指定完固定IP,如果容器重启,那么固定IP会消失,还需要重新指定,容器量大时可写个脚本来完成

1. 下载PipeWoke

下载地址:https://github.com/jpetazzo/pipework.git

解压到/usr/local/bin/,并且加上可执行权限

2. 启动两个容器

docker run -itd --name test1 --net=none centos /bin/bash

docker run -itd --name test2 --net=none centos /bin/bash

3. 设置容器IP

pipework br0 test2 192.168.15.244/24@192.168.15.1

pipework br0 test1 192.168.15.243/24@192.168.15.1

其中@后面的ip为Docker容器宿主机的网关

或者是2,3合并执行如下的命令:

pipework br0 $(docker run -itd --name test1 --net=none centos /bin/bash) 192.168.31.243/24@192.168.31.1

pipework br0 $(docker run -itd --name test2 --net=none centos /bin/bash) 192.168.31.244/24@192.168.31.1

4. 在rc.local中配置,如下:

vim /etc/rc.d/init.d/rc.local

具体内容:

service docker start

docker start test1

docker start test2

pipework br0 test2 192.168.31.244/24@192.168.31.1

pipework br0 test1 192.168.31.243/24@192.168.31.1

当然要给rc.local可执行权限:

chmod +x rc.local

另外需要注意的是,在执行rc.local的时候系统里面的path变量没有初始化完成,所以需要用命令的完全路径

如果不知道命令路径位置,使用which,比如 which docker  就会显示docker所在的路径


三、报错处理:

在通过pipework 给docker容器分配IP的时候, 系统报出以下错误:

Object "netns" is unknown, try "ip help".

该错误是由于系统版本暂时不支持namespaces, 可通过更新内核或者iproute的方法获取对namespaces的支持.更新方法如下:

添加yum源:

cat /etc/yum.repos.d/rdo.repo

[openstack-kilo]

name=OpenStack Kilo Repository

baseurl=https://repos.fedorapeople.org/repos/openstack/EOL/openstack-icehouse/epel-6/

skip_if_unavailable=0

enabled=1

gpgcheck=0

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-kilo

## 接下来更新iproute即可:

yum update iproute -y

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 摘要: 本文讲的是Docker使用自定义网桥docker, Docker 服务默认会创建一个 docker0 网桥...
    think_lonely阅读 3,133评论 0 2
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,787评论 0 7
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,524评论 0 120
  • 一、Docker 简介 Docker 两个主要部件:Docker: 开源的容器虚拟化平台Docker Hub: 用...
    R_X阅读 4,406评论 0 27
  • 举国庆华诞,万家迎月圆。 国庆逢仲秋,盛世家业安。 世界那么大,正当转一转。 莫忘归乡路,阖家大团圆。
    二个人世界阅读 442评论 0 0