• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
导航菜单
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx
您的位置:首页 > 服务器 >虚拟化 > 详解docker容器分配静态IP

详解docker容器分配静态IP

作者:mosmith 字体:[增加 减小] 来源:互联网

本文主要包含docker,容器,静态ip,docker设置静态ip,docker静态ip等服务器相关知识,mosmith 希望可以进行参考

最近因为工作要求需要用学习使用docker,最后卡在了网络配置这一块。默认情况下启动容器的时候,docker容器使用的是bridge策略比如:

docker run -ti ubuntu:latest /bin/bash

等效于

docker run -ti --net=bridge ubuntu:latest /bin/bash

 bridge策略下,docker容器自动为我们分配了一个IP地址,并连接到docker0的网桥上。但这里有一个问题,这个IP地址并不是静态分配的,这对我们的对容器的实例的网络管理造成一了些困难。这里笔者并不想直接给出解决方案,因为那样子并没有什么卵用,理解原理,一步一步踏实走才是。

相信看过docker介绍的读者都知道docker是借助于cGroup和namespace技术来实现资源控制和隔离的。在开始之前读者需要去看一下linux上namespace的使用,本文并不想带入太多的其它不相关的主题。好了现在假设你已经了解namespace了,那你肯定想知道docker在网络上是怎么利用namespace来做手脚的。大致过程应该和下面的一致:(下面只是个人猜测,因为笔者并没有太多时间去研究它的源码)

1、创建一个Net Namespace  netns1。

2、创建一对veth,将peer加入到netns1,将别一端接入到网桥bridge0中。

3、为这两个veth分配IP。

4、用netns1启动容器中的程序比如/bin/bash。

可惜的是,docker run并没有一个选项让我们去指定所分配的IP,因为网络的确是个大难题。那就得自己动手丰衣足食了。

从上面我们知道,docker在网络这里用到了Net namespace,veth和网桥bridge。注意如果你意图使用ip netns list去查看docker在启动容器的时候使用了那个netns,你会失望地发现没有对应netns。其实并不是没有,而是docker为了掩盖一些细节,在做完初始化工作后,docker便将这个netns从/var/run/netns中删除了,我们完全可以用下面的方式让它打回原形:

ln -s /proc/${container's pid}/ns/net /var/run/netns/${the's name you want to display}
ip netns list

好了,现在说一下我们给容器分配静态IP的思路:

1、用--net=none方式启动容器,这样容器有了自己的namespace(这一步我们无法干预的,so let it go!)

2、获取容器的进程号PID,然后根据PID将它的Net namespace打回原型。

3、创建一个bridge0,用brctl工具(可以通过安装bridge-utils工具来实现)。

4、创建一对veth:vethBridge,vethContainer,将peer端vethContainer加入到窗口的Net namespace中,将vethBridge接入到bridge0中:brctl add...

5、设置vethContainer的IP。

6、重启容器的network service。

下面以我机器为例(deepin 2015 kernel 4.5.0)

1、 启动容器:

2、获取容器的进程号:

3、根据进程号将容器的Net namespace打回原型:

4、创建网桥bridge0

5、创建veth,配置对应的veth,最后重启容器的network service

6、在容器中可以看到静态分配的IP: 192.168.9.10

注意,现在容器还不能与主机通信,因为主机没有到bridge的设备,如果需要和主机进行通信的话可以添加一对veth,将一端接入bridge。如果容器需要我外部通信的话,可以通过启用内核转发,并在iptables中添加相应的转发规则。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:

  • 在Docker容器中使用iptables时的最小权限的开启方法
  • docker 如何搭建私有仓库(ubuntu 14.04,Docker版本1.6.4)详细介绍
  • Docker容器内存限制的方法
  • 详解Docker cpu限制分析
  • 详解Docker 容器使用 cgroups 限制资源使用
  • Ubuntu下安装配置Docker的教程详解
  • 在Ubuntu 16.04安装与使用Docker的教程详解
  • Docker实践—CentOS7上部署Kubernetes详解
  • docker 详解设置容器防火墙
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Docker实践8:Compose,docker实践compose
  • Docker buildx构建多平台镜像并推送到私有仓库的方法
  • Docker三个基本概念镜像(Image)容器(Container)仓库(Repository)
  • 什么是Docker?为什么要使用Docker
  • docker 开源的应用容器引擎
  • 如何给docker设置http代理
  • docker官方mysql镜像自定义配置详解
  • 详解Docker数据管理(数据卷&数据卷容器)
  • 如何利用Docker容器实现代理转发与数据备份详解
  • 详解Docker Swarm 在持续集成测试中的应用

相关文章

  • centos7 安装Jenkins详细介绍
  • Linux下Docker安装和使用教程
  • Xen虚拟机在CentOS系统中的安装和使用方法
  • Docker 常用命令整理及使用注意事项总结
  • Docker搭建私有镜像仓库的方法
  • 浅谈Spark RDD API中的Map和Reduce
  • vmware 实现linux目录映射window本地目录图文详解
  • 在Xen虚拟机全虚拟化环境中安装Windows2003系统
  • 详解Docker-compose networks 的例子
  • 什么是docker Docker入门教程第一篇

文章分类

  • windows
  • 服务器硬件
  • 服务器运维
  • 云计算
  • 虚拟化
  • IIS教程
  • Linux
  • Apache
  • Ftp
  • DNS
  • Nginx

最近更新的内容

    • VirtualBox 在Centos 7 中安装增强功能图解 (共享文件夹)
    • Docker如何固定IP设置的方法
    • 总结红帽RHEV3.0 展望RHEV3.1
    • Docker 私有仓库恢复实例详解
    • VirtualBox中CentOS7安装教程
    • Docker教程之Ubuntu 安装 Docker详细介绍
    • Docker如何限制容器可用的内存
    • VM12中CentOS7以NAT的方式连接网络的方法
    • centos下最简安装openstack——使用packstack详解
    • docker配置独立桥接IP的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有