设为首页 收藏本站
查看: 1142|回复: 0

[经验分享] 为docker容器设置独立ip

[复制链接]

尚未签到

发表于 2017-12-7 10:50:03 | 显示全部楼层 |阅读模式
  http://www.itnpc.com/news/web/146104788357316.html
  在知乎上看到这一段,先mark一下。



没有用过国内的云服务,不是很清楚。就像 @向军 所说的那样,修改interface可以解决问题
另外,docker不是一定要用172.*的地址段,你可以用docker -b BRIDGE指定其他的interface,使用其他的IP段
参见:https://docs.docker.com/articles/networking/#bridge-building
e.g.
# brctl addbr mydockerbridge
# ip addr add 192.168.1.1/24 dev mydockerbridge
# ip link set dev mydockerbridge up
# docker -d -b mydockerbridge
之后所有的docker container 就会使用192.168.1.*这个IP段了
作者:Honglin Feng
链接:https://www.zhihu.com/question/24863856/answer/29256378
来源:知乎
著作权归作者所有,转载请联系作者获得授权。




因为阿里云默认把所有的私网地址段都加到导致docker找不到一个可用的IP段了。要解决这个问题只需要一步,修改/etc/network/interface 去掉172那段的路由,然后ip route del 172.段的路由。
腾讯云没用过,按照相同思路排查下。

作者:向军
链接:https://www.zhihu.com/question/24863856/answer/29253733
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

  必须在--net=none模式下才能拿用pipework设置ip.
  1、网络模式
  docker支持四种网络模式,使用--net选项指定:


  •   host,--net=host,如果指定此模式,容器将不会获得一个独立的network namespace,而是和宿主机共用一个。容器将不会虚拟出自己的网卡,IP等,而是使用宿主机的IP和端口,也就是说如果容器是个web,那直接访问宿主机:端口,不需要做NAT转换,跟在宿主机跑web一样。容器中除了网络,其他都还是隔离的。

  •   container,--net=container:NAME_or_ID,与指定的容器共同使用网络,也没有网卡,IP等,两个容器除了网络,其他都还是隔离的。

  •   none ,--net=none,获得独立的network namespace,但是,并不为容器进行任何网络配置,需要我们自己手动配置。

  •   bridge,--net=bridge,默认docker与容器使用nat网络,一般分配IP是172.17.0.0/16网段,要想改为其他网段,可以直接修改网桥IP地址,例如:

  $ sudo ifconfig docker0 192.168.10.1 netmask 255.255.255.0
  
  2、容器默认网络配置过程
  先创建一个docker0的网桥,使用Veth pair创建一对虚拟网卡,一端放到新创建的容器中,并重命名eth0,另一端放到宿主机中,以veth+随机7个字符串名字命名,并将这个网络设备加入到docker0网桥中,网桥自动为容器分配一个IP,并设置docker0的IP为容器默认网关。同时在iptables添加SNAT转换网桥段IP,以便容器访问外网。
  Veth par是用于不同network namespace间进行通信的方式,而network namespace是实现隔离网络。
  3、容器桥接宿主机网络
  关闭docker并设置桥接模式:
  $ sudo apt-get install bridge-utils

  $ sudo service docker stop
  #关闭默认网桥
  $ sudo ip link set dev docker0 down
  #删除默认网桥
  $ sudo brctl delbr docker0
  创建桥接网卡:
  $ sudo brctl addbr br0    #创建网桥

  $ sudo vi /etc/network/interfaces #将原有宿主机IP配置到新创建的网桥上









auto  eth0

iface eth0 inet manual

auto  br0

iface br0 inet static

    address 192.168.10.10   #宿主机IP

    netmask 255.255.255.0

    gateway 192.168.10.1

    dns-nameservers 192.168.10.1
  $ sudo /etc/init.d/networking restart
  重启网卡后,再通过ifconfig命令查看,多了br0网桥,并且IP地址也绑定在了上面。
  #修改docker桥接网桥,并重启
  $ sudo  vi /etc/default/docker
  DOCKER_OPTS="-b=br0"
  $ sudo service docker restart
  接下来启动一个容器,先不配置网络信息:
  $ sudo docker run -itd --name=ubuntu_test --net=none ubuntu  
  不配置ip的原因是:容器启动后自动随机分配一个网桥段的IP,这个IP不管你宿主机网络中是否已经分配,它都会根据自身的算法来分配IP,docker有自己的一套分配算法。
所以既然选择桥接网络,就要事先规划好IP分配。
  4、创建容器没配置网络,该怎么配置呢?
  pipework是一个LXC网络管理工具,用shell写的,有200多行代码。可以给容器配置固定IP地址:
  $ git clone https://github.com/jpetazzo/pipework.git
  $ sudo cp pipework/pipework /usr/local/bin/
  $ sudo pipework br0 ubuntu_test 192.168.18.29/24@192.168.18.1
  Warning: arping not found; interface may not be immediately reachable
  这一步是给配置容器网络并连接网桥,@左边是与宿主机同网段IP,右边是网关。
  提示arping命令没发现,可以通过apt-get install arping来安装。
  $ sudo brctl show   #查看虚拟网卡veth开头的已加入网桥
  $ sudo docker attach ubuntu_test  
  #进入容器用ifconfig命令查看,IP信息已经配置上,通过ping百度及同网段IP是相通的,配置成功。
  pipework工具怎么实现配置的IP呢?
  pipework是通过ip netns exec进入容器的net命名空间,来配置容器net命名空间的网络参数。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421623-1-1.html 上篇帖子: 有容云-【原理】Docker存储驱动之AUFS 下篇帖子: Docker-Compose 一键部署Ningx+.Net Core+Redis集群
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表