为了账号安全,请及时绑定邮箱和手机立即绑定

CentOS7下docker用原生方法使用宿主机所在网络

标签:
Docker

背景

docker以前的版本不支持直接配置宿主机所在网段ip并跟其直接互通的功能,当然,也可以实现这个功能,只是有点绕,而且还有一些第三方工具例如pipework把这些琐碎的过程封装起来,让步骤简化。但是,现在不需要了,现在1.12docker已经直接支持了直接使用宿主机所在网段资源。

具体步骤

环境准备

yum -y install kernel; # 更新到最新的kernel版本yum -y update; # 更新到最新的CentOS7.xtee /etc/yum.repos.d/docker.repo <<-'EOF'[dockerrepo]name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/enabled=1gpgcheck=1gpgkey=https://yum.dockerproject.org/gpgEOF

yum -y install docker-engine; # 安装docker最新版systemctl start docker.service; # 启动dockersystemctl enable docker.service; # 使docker服务随着机器启动而启动

网络创建

docker network create -d macvlan \
    --subnet=10.0.0.0/24 \
    --gateway=10.0.0.1 \
    -o parent=eth0 MACNET;

注意:

  1. 这里的macvlan是kernel的模块名,docker 1.12开始支持其作为驱动来创建网络

  2. 这里的10.0.0.0/24是宿主机所在网络的网段

  3. 10.0.0.1是网关

  4. eth0是宿主机接入10.0.0.0/24的网络设备

创建实例

docker run --net=MACNET \
      --ip=10.0.0.11 \
      -it \
      --rm alpine /bin/sh;

注意:

  • 10.0.0.11是新docker实例的ip地址

简单测试

ping -c 5 10.0.0.1;

这是在上面建立的docker实例的控制台上ping宿主机网关,显示能通

ping -c 5 10.0.0.11;

这是在宿主机所在网段的任意其他机器上ping这台docker实例,也能通

其他

Q: 为嘛这里的docker不支持ipvlan的驱动呢?

A: 因为官方资料显示kernel 4.2以上才支持ipvlan(虽然准确讲4.2之前也有支持,但是有bug),而从3.9就开始支持macvlan了。

Q: 为嘛RedHat这么喜欢把高版本的功能backport到老版本的操行,却没有把ipvlan的支持backport到3.10(CentOS 7.x的kernel版本)呢?

A: 。。。zzzzzzZZZZZZZZZ



作者:haw_haw
链接:https://www.jianshu.com/p/1241ca36687e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消