Docker精华问答 | 如何让一个容器连接两个网络?

640?wx_fmt=png

如今Docker的使用已经非常普遍,特别在一线互联网公司。使用Docker技术可以帮助企业快速水平扩展服务,从而到达弹性部署业务的能力。在云服务概念兴起之后,Docker的使用场景和范围进一步发展。今天,就让我们来看看关于Docker的深度问答。


640?wx_fmt=gif1

Q:vethxxxx 这种虚拟网卡和容器的对应关系从哪里看? 


A:使用如下命令:

$ docker network ls640?wx_fmt=png

注意这里的 br-56f04389b8f0 以及 br-094fcb269385,br- 后面的是上面的网络id,由此可以看出 veth 和 Docker 网络的对应关系,而容器都是连接到了某个Docker网络上的,从而就有了容器和 veth 的对应关系。对于某个网络出现了多个veth 的情况,可以观察veth22996d2@if11 后面的 if11 这部分,和容器内的 ip addr 的结果,一般奇-偶是一对。


640?wx_fmt=gif2

Q:如何让一个容器连接两个网络? 


A:如果是使用 docker run,那很不幸,一次只可以连接一个网络,因为 docker run 的 --network 参数只可以出现一次(如果出现多次,最后的会覆盖之前的)。不过容器运行后,可以用命令 docker network connect 连接多个网络。假设我们创建了两个网络:640?wx_fmt=png

640?wx_fmt=gif3

Q:Docker 多宿主网络怎么配置


A:Docker 跨节点容器网络互联,最通用的是使用 overlay 网络。

一代 Swarm 已经不再使用,它要求使用 overlay 网络前先准备好分布式键值库,比如 etcd, consul 或 zookeeper。然后在每个节点的 Docker 引擎中,配置 --cluster-store 和 --cluster-advertise 参数。这样才可以互连。可以参考我写的 LNMP 容器互联例子中的 run1.sh 这个脚本,这个脚本是利用 docker-machine自动建立 Swarm 并且配置好 overlay 的脚本,可以分析其流程。

现在都在使用二代 Swarm,也就是 Docker Swarm Mode,非常简单,只要 docker swarm init 建立集群,其它节点 docker swarm join 加入集群后,集群内的服务就自动建立了 overlay 网络互联能力。

需要注意的是,如果是多网卡环境,无论是 docker swarm init 还是 docker swarm join,都不要忘记使用参数 --advertise-addr 指定宣告地址,否则自动选择的地址很可能不是你期望的,从而导致集群互联失败。格式为 --advertise-addr <地址>:<端口>,地址可以是 IP 地址,也可以是网卡接口,比如 eth0。端口默认为 2377,如果不改动可以忽略。

此外,这是供服务使用的 overlay,因此所有 docker service create 的服务容器可以使用该网络,而 docker run 不可以使用该网络,除非明确该网络为 --attachable。


640?wx_fmt=gif4

Q:明明 docker network ls 中看到了建立的 overlay 网络,怎么docker run 还说网络不存在啊? 


A:如果在 docker network ls 中看到了如下的 overlay 网络:640?wx_fmt=png

报错说mynet 网络找不到。其实如果仔细观察,会看到这个名为mynet 的网络,驱动是 overlay没有错,但它的Scope 是swarm。这个意思是说这个网络是在二代Swarm环境中建立的overlay网络,因此只可以由Swarm环境下的服务容器才可以使用。而docker run所运行的只是零散的容器,并非Service,因此自然在零散容器所能使用的网络中,不存在叫mynet网络。

docker run可以使用的overlay网络是Scope为global的overlay网络,也就是使用外置键值库所建立的overlay网络,比如一代Swarm的overlay网络。这点在 1.13 后稍有变化。如果是 1.13 以后的系统,会看到这样的信息:640?wx_fmt=png


640?wx_fmt=gif5

Q:容器怎么取宿主机 IP 啊? 


A:单机环境 

如果是单机环境,很简单,不必琢磨怎么突破命名空间限制,直接用环境变量送进去即可。640?wx_fmt=png

然后容器内直接读取 HOST_IP 环境变量即可。

集群环境 

集群环境相对比较复杂,docker service create 中的 -e 以及 --env-file是在服务创建时指定、读取环境变量内容,而不是运行时,因此对于每个节点都是一样的。而且目前不存在 dockerd -e 选项,所以直接使用这些选项达不到我们想要的效果。不过有变通的办法,可以在宿主上建立一个 /etc/variables 文件(名字随意,这里用这个文件举例)。其内容为:640?wx_fmt=png

其中 1.2.3.4 是这个节点的宿主 IP,因此每个节点的 /etc/variables 的内容不同。

而在启动服务时,指定挂载这个服务端本地文件:

docker service create --name app \

--mount type=bind,source=/etc/variables,target=/etc/variables:ro \

myapp

由于 --mount 是发生于容器运行时,因此所加载的是所运行的服务器的 /etc/variables,里面所包含的也是该服务器的 IP 地址。在 myapp 这个镜像的入口脚本加入加载该环境变量文件的命令:640?wx_fmt=png

这样app这个服务容器就会拥有 HOST_IP 环境变量,其值为所运行的宿主 IP。


640?wx_fmt=png

小伙伴们冲鸭,后台留言区等着你!

关于Docker,今天你学到了什么?还有哪些不懂的?除此还对哪些话题感兴趣?快来留言区打卡啦!留言方式:打开第XX天,答:……

同时欢迎大家搜集更多问题,投稿给我们!风里雨里留言区里等你~


福利

1、扫描添加小编微信,备注“姓名+公司职位”,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


640?wx_fmt=jpeg

2、公众号后台回复:白皮书,获取IDC最新数据白皮书整理资料!


推荐阅读:

  • 全面剖析企业私有云

  • 30 秒?!Chrome 插件带你速成编程学习 | 程序员硬核评测

  • 为什么程序员下班后只关显示器从不关电脑?

  • 算法警告!该图片涉嫌违规不予显示

  • 交易机器人春天已来?先看完这篇再说吧

  • 2019年中国IT市场趋势热点

  • 2019年最值得关注的五大微服务发展趋势


640?wx_fmt=png喜欢就点击“好看”吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/524528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IOS – OpenGL ES 黑白马赛克效果 GPUImageMosaicFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

人生苦短,Python之父要解开这个困惑

“我累了&#xff0c;需要很长时间的休息。”2018 年 7 月&#xff0c;在 PEP 572&#xff08;Python 改进提案&#xff09; 被接受后的第三天&#xff0c;由于仍然不断面对着别人的质疑&#xff0c;反馈意见不断袭来&#xff0c;让这位一手缔造新的编程语言帝国的图灵奖获得者…

IOS – OpenGL ES 卡通效果(黑色粗线描边) GPUImageToonFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

云重磅 | 收购季:英伟达天价收购Mellanox;F5 6.7亿喜提Nginx;5G潮起3G潮落 中国移动耗资3000亿...

戳蓝字“CSDN云计算”关注我们哦&#xff01;嗨&#xff0c;大家好&#xff0c;重磅君带来的【云重磅】特别栏目&#xff0c;如期而至&#xff0c;每周二第一时间为大家带来重磅新闻。把握技术风向标&#xff0c;了解行业应用与实践&#xff0c;就交给我重磅君吧&#xff01;重…

IOS – OpenGL ES 像素化马赛克效果 GPUImagePixellateFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

波音737连续坠毁,AI要背锅?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 若名出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;2018 年 10 月 29 日&#xff0c;印尼狮航的波音 737MAX8 客机在起飞 13 分钟后坠海&#xff0c;机上 178 名乘客全部不幸遇难。2019 年 3 月 10 日&#xff0c…

IOS – OpenGL ES 同心圆像素化马赛克效果 GPUImagePolarPixel

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

云计算时代运维的出路在哪?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;王洪鹏做过开发&#xff0c;搞过运维&#xff0c;又在在云计算行业折腾了几年&#xff0c;不说自己技术怎样、怎样……&#xff0c;暂且说说笔者在当前公司做云计算这几年的些许感悟&#xff0c;兴许可以给正在从事…

VSFTPD 服务器 3秒钟搭建

文章目录一、常用命令&#xff08;Linux&#xff09;二、搭建Vsftpd流程2.1. 检测系统2.2. yum安装一、常用命令&#xff08;Linux&#xff09; 作用命令启动sudo service vsftpd start关闭sudo service vsftpd stop重启sudo service vsftpd restart查看运行状态sudo service …

IOS – OpenGL ES 黑白网状效果 GPUImageCrosshatchFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

IEDA 配置Git_04

前提&#xff1a;打开idea CtrlAltS打开设置&#xff1a; 路径&#xff1a;File\seeting\version control\git

要闻君说:苹果又要新品发布啦;英伟达壕气,狂砸69亿收购Mellanox;谷歌瞄准印度小学生,推出AI学习工具;...

关注并标星星CSDN云计算每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go 大家好&#xff01;偶是要闻君。话说每年的苹果新品发布会都会被列入“熬夜也要看一看”的名单中&#xff0c;3月将尽&#xff0c;今年又有什么苹果新料可爆&#xff1f;前瞻一把&a…

IOS – OpenGL ES 色彩丢失/模糊效果 GPUImageColorPackingFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

Git 用户名和邮箱配置_01

文章目录1. 打开 git bash here2. 用户名和邮箱配置1. 打开 git bash here 2. 用户名和邮箱配置 git config --global user.name "用户名" git config --global user.email "邮箱" git config --list

Storm精华问答 | 如何处理常见故障?

Hadoop能够进行大批量数据的离线处理,但是在实时计算上的表现实在是不尽如人意;而Storm就可以担当这部分的角色&#xff0c;今天&#xff0c;就让我们看看关于Storm的精华问答吧。1Q&#xff1a;发布topology到远程集群时&#xff0c;出现AlreadyAliveException(msg: xxx is al…

IOS – OpenGL ES 图像晕影移动 GPUImageVignetteFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…

以安全之名:2019年DevSecOps社区调研白皮书解读

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;刘淼&#xff0c;HPE架构师&#xff0c;慧与大学讲师&#xff0c;Exin DevOps Master和DevOps Professional授权讲师&#xff0c;CSDN博主(liumiaocn)&#xff0c;爱老婆爱厨艺的终身技术学习者。2019年3月5号&…

docker Gitlab14.5.0 安装、配置、部署、使用

文章目录一、镜像容器1. 安装Docker2. 查找GitLab镜像3. 拉取镜像4. 创建容器二、修改配置文件2.1. gitlab.rb2.2. 重启gitlab容器2.3. 监控日志三、效果验证3.1. 登录gitlab3.2. 获取密码3.3. 创建一个项目四、用户使用1.下载git.exe4.2. 设置ssh4.3. 秘钥查验4.4. 秘钥同步4.…

try-catch 异常处理的执行过程

public void exception(){try{System.out.println("一");System.out.println(2/0);System.out.println("二");}catch(ArithmeticException m){System.out.println("异常解决了");}System.out.println("三");}try中没有异常&#xff0c…

IOS – OpenGL ES 图像晕影扩散 GPUImageVignetteFilter

目录 一.简介二.效果演示三.源码下载四.猜你喜欢 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 基础 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目录 >> OpenGL ES 转场 零基础 OpenGL (ES) 学习路线推荐 : OpenGL (ES) 学习目…