docker - 由于docker swarm子网与host机器网络冲突导致的container通信问题的解决方案
背景
近期,公司网络要迁移到新的网段,所以原来在服务器上面搭建的docker swarm需要重新构建。。。
拿到新的服务器地址看了一下,“10.xxx.xxx.xxx" 。。。 纳尼,这IP赶脚是子网的地址段呀,居然用到了服务器上面!唉,算了吧,当时也没多想,可能是自己少见多怪吧。。。于是就把几台服务启动swarm搭建好,配置好了manager和work节点,然后创建了Overlay网络,在上面用2个busybox的container做了个小测试,container之间可以连接,于是把之前停止的container都启动,完事后这样高高兴兴的下班啦!!(不加班的生活真美好)
第二天一到公司,还没坐稳呢,旁边的哥们就急急忙忙的过来找我,“我们的app无法连接到数据库,报错啦!!”(PS: 我们的app和数据库分别跑在了不同宿主机的container上面,彼此通过docker的子网进行通信)。 奇怪吖,我昨天还试了试可以通信呀,怎么今天就不行了呢??
分析问题
我们总共有3台机器挂在swarm下,有一台机器是manager(我们简单起见,命名为M),另外两台作为worker(W1+W2)加入到swarm集群中。简单的拓扑结构如下图:

昨天,我做测试的时候是用的M与W1,当时没出现问题;今天出现问题的是M与W2,containers 之间无法通信; 之后,我又尝试在W1与W2上面运行containers,也无法通信。。。。
没办法,尝试着重新创建swarm集群,然后再创建跨节点的overlay网络,然而,得到了令人惊奇的结果,这次所有container都无法通信!!
于是,先从swarm集群入手排错,swarm运行正常,没有任何发现。。。再从overlay网络层面进行分析,运行指令:
#docker network inspect myOverlayNet
发现docker默认创建的子网是 10.0.0.0

会不会是由于docker 子网与 host 机器的网络 同在一个网段(10.xxx.xxx.xxx)而导致的冲突呢???
解决
重新建立子网, 这次指定好subnet的网段,为了和host机器区分开来,使用了192.~的网段,命令如下
#docker network create -d overlay --subnet=192.168.0.0/ --attachable myOverlay
在不同的hosts(M, W1 与 W2)上面新建立containers,(busybox1, busybox2 和 busybox3)
## run busybox1 on manage node
# docker run -itd --name=busybox1 --network=myOverlay busybox /bin/sh ## run busybox2 on worker node
# docker run -itd --name=busybox2 --network=myOverlay busybox /bin/sh ## run busybox3 on worker node
# docker run -itd --name=busybox3 --network=myOverlay busybox /bin/sh
进入container,测试连接
##在 busybox1 里测试连接到 busybox2 and busybox3 # nslookup busybox2 --output--
Name: busybox2
Address: 192.168.0.2 busybox2.myOverlay
# nslookup busybox3 --output--
Name: busybox3
Address: 192.168.0.3 busybox3.myOverlay
OK,这次通信没有问题啦,看来真的是docker 的默认子网(10.0.0.0)与服务器(宿主机)上的IP段(10.xxx.xxx.xxx)冲突导致的问题。
所以我们的解决方案就是: 在创建 docker 子网的时候指定IP段
最后,感谢大家的关注,欢迎大家留言交流 :)
docker - 由于docker swarm子网与host机器网络冲突导致的container通信问题的解决方案的更多相关文章
- Docker 集群Swarm创建和Swarm Web管理
关于Docker Swarm更多的介绍请查看<Docker管理工具-Swarm部署记录> 一.环境配置 1.安装环境 # cat /etc/redhat-release CentOS Li ...
- Docker管理工具 - Swarm部署记录
之前介绍了Docker集群管理工具-Kubernetes部署记录,下面介绍另一个管理工具Swarm的用法,Swarm是Docker原生的集群管理软件,与Kubernetes比起来比较简单. Swarm ...
- Dockerfile & Docker Swarm & Docker Stack & Docker Compose
Dockerfile 通俗地讲,它是为了指导单个镜像从无到有的构建过程.如果你镜像是从Docker registry上面拉下来的,那就用不到这个文件:如果你是自己的应用,想打包成镜像,那就需要这个文件 ...
- Docker 小记 — Compose & Swarm
前言 任何相对完整的应用服务都不可能是由单一的程序来完成支持,计划使用 Docker 来部署的服务更是如此.大型服务需要进行拆分,形成微服务集群方能增强其稳定性和可维护性.本篇随笔将对 Docker ...
- Docker 入门之swarm部署web应用
笔者近期在利用的docker搭建一个swarm集群,目前的应用还是入门级的,读者可自行根据自己的需要修改自己需要部署的应用,今天笔者介绍的是一个web应用的swarm集群的搭建.看这篇文章之前,我希望 ...
- Docker管理工具-Swarm
一.Swarm介绍 Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机.Swarm使用标准的Doc ...
- Docker深入浅出系列 | Swarm多节点实战
目录 前期准备 Swarm基本概念 什么是Docker Swarm 为什么要用Swarm Swarm的网络模型 Swarm的核心实现机制 服务发现机制 负载均衡机制Routing Mesh Docke ...
- docker入门3-docker swarm
swarm介绍 想要将应用部署在一个集群并运行在多台机器上? 通过将多台机器链接到"Dockerized"集群以实现应用程序运行在多容器,多机器的技术被称为swarm. 一个swa ...
- DCOS实践分享(2):基于Docker Compose和Swarm的Docker化之路
2016 年1 月 23 日,北京史上气温最低的一天. 在下午 1 点半的时候,由 DaoCloud 赞助的 2016 年度首次 Docker Meetup 准时开始. 在这次Meetup中,我分享了 ...
随机推荐
- windows环境下使用virtualenv对python进行多版本隔离
最近在用python做一个文本的情感分析的项目,用到tensorflow,需要用python3的版本,之前因为<机器学习实战>那本书的缘故,用的是python2.7.所以目前的情况是要两个 ...
- python str转dict
两种方法 捷径 eval(str) >>> user = "{'name' : 'jim', 'sex' : 'male', 'age': 18}" >&g ...
- redhat初始化yum源,使用阿里云yum源
本篇文章介绍redhat7使用国内阿里云yum安装源的方法,源地址使用的https://mirrors.aliyun.com/对应使用Centos7下的安装源. 在学习<Linux就该这么学&g ...
- Qt中的View Model模型
原始日期: 2016-08-17 21:19 Qt中的View主要有三种QListView,QTreeView, QTabelView 而对应的Model是:QStringListModel, QAb ...
- 谈谈Nancy中让人又爱又恨的Diagnostics【上篇】
前言 在Nancy中有个十分不错的功能-Diagnostics,可以说这个功能让人又爱又恨. 或许我们都做过下面这样的一些尝试: 记录某一个功能用到的相关技术信息 记录下网站的访问记录 全局配置某些框 ...
- PS-前端切图教程(切jpg图和切png图)
微微一运功,把家底都抖出来了. 不过,作为一个设计出身的前端来说,摸ps就和摸键盘一样了 所以可能教程中还是有没用过ps的人看不懂的地方, 欢迎加群讨论:613512106... ---------- ...
- DDD理论学习系列(8)-- 应用服务&领域服务
DDD理论学习系列--案例及目录 1. 引言 单从字面理解,不管是领域服务还是应用服务,都是服务.而什么是服务?从SOA到微服务,它们所描述的服务都是一个宽泛的概念,我们可以理解为服务是行为的抽象.从 ...
- 【LeetCode】191. Number of 1 Bits
题目: Write a function that takes an unsigned integer and returns the number of ’1' bits it has (also ...
- 关于DOM中的model(将元素转成对象进行操作)
DOM document (html, xml) object 将文档中的HTML元素转成js的对象 通过ID找到文档的元素转成js对象 var obj = document.getElementBy ...
- CSS3学习系列之动画
Transitions功能使用方法 在css3中,transitions功能通过将元素的某个属性从一个属性值在指定的时间内平滑过渡到另一个属性值来实现动画功能,可通过transitions属性来使用t ...