具有自定义网络的 Docker swarm

2023-12-26

我正在尝试弄清楚如何在 Docker 中正确使用 Swarm 模式。首先,我尝试在 2 个工作人员和管理人员计算机上运行容器,而不指定自定义网络(因此我使用默认的入口覆盖网络)。但是,如果我使用入口网络,由于某种原因我无法解析tasks.myservice.

所以我尝试像这样配置自定义网络:

docker network create -d overlay elasticnet

所以现在,当我bash进入其中一个容器,我可以成功解决tasks.myservice但我无法再访问我在服务创建中定义的端口--publish外部(当我使用入口网络时可以)。

有没有办法:

  1. 使用入口网络并能够解析tasks.myservice或任何其他将定向到我的所有服务容器的 DNS 记录?

  2. 或者,使用自定义网络,但是--publish端口正确,以便我可以从外部访问它们?

EDIT

这就是我创建服务的方式,

没有自定义网络:

docker service create --replicas 3 --label elasticsearch --endpoint-mode vip --name elastic -e ES_HOSTS="tasks.elastic" --publish 9200:9200 --mount type=bind,source=/tmp/es,destination=/usr/share/elasticsearch/config  --update-delay 10s   es:latest

使用自定义网络:

docker service create --replicas 3 --network elasticnet --label elasticsearch --endpoint-mode vip --name elastic -e ES_HOSTS="tasks.elastic" --publish 9200:9200 --mount type=bind,source=/tmp/es,destination=/usr/share/elasticsearch/config  --update-delay 10s   es:latest

看下面的例子:

1.创建用户定义的覆盖网络:

sudo docker network create overlay1 --driver overlay
9g4ipjn513iy        overlay1            overlay             swarm 

2.运行具有公开端口和 3 个副本的服务:

sudo docker service create --name nginx --replicas 3 --publish 80:80 --network overlay1 nginx

你不必指定endpoint-mode如果你要使用VIP,其默认值。

sudo docker service  ps nginx
ID                         NAME     IMAGE  NODE  DESIRED STATE  CURRENT STATE           ERROR
dbz8b4jjfp6xg3vqunt1x8shx  nginx.1  nginx  dg1   Running        Running 13 minutes ago  
9d8zr6zka0sp99vadr8eqq2t2  nginx.2  nginx  dg3   Running        Running 13 minutes ago  
cwbcegunuxz5ye9a8ghdrc4fg  nginx.3  nginx  dg3   Running        Running 12 minutes ago 

3.验证: 从节点之一测试暴露的端口:

administrator@dg1:~$ telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is '^]'.

测试来自外部主机的暴露端口:

user@externalhost /home/balrog% telnet dg1 80
Trying 172.30.135.101...
Connected to 172.30.135.101.
Escape character is '^]'.

从容器内部测试 DNS 查找:

sudo docker exec -it 05d05f934c68 /bin/bash
root@05d05f934c68:/# ping nginx                                                                                                                                         
PING nginx (10.0.0.3): 56 data bytes
64 bytes from 10.0.0.3: icmp_seq=0 ttl=64 time=0.050 ms
64 bytes from 10.0.0.3: icmp_seq=1 ttl=64 time=0.121 ms

root@05d05f934c68:/# ping tasks.nginx 
PING tasks.nginx (10.0.0.5): 56 data bytes
64 bytes from 10.0.0.5: icmp_seq=0 ttl=64 time=0.037 ms
64 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=0.149 ms

ElasticSearch具体建议:

Elasticsearch 有自己的集群,可以提供Failover and Loadbalancing特征。

您可以使用shards and replicas per index在属于elasticsearch集群一部分的elasticsearch主机中。

话虽这么说,我建议你创建 3 个Services with 1 replica每个,然后加入一个elasticsearch集群,然后创建indexes with 3 shards and 3 replicas。你将会拥有loadbalancing and failover在elasticsearch集群内。

阅读更多有关shards, Use this https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有自定义网络的 Docker swarm 的相关文章

随机推荐

  • c 编程难题

    给定一个所有元素均为正数的数组 求子序列的最大和 约束条件是序列中的 2 个数字不应在数组中相邻 因此 3 2 7 10 应返回 13 3 和 10 之和 或 3 2 5 10 7 应返回 15 3 5 和 7 之和 我尝试使用所有可能允许
  • NPM 搜索:内存不足

    在 ubuntu 14 10 3 13 0 76 generic 120 Ubuntu SMP Mon Jan 18 15 59 10 UTC 2016 x86 64 x86 64 x86 64 GNU Linux 上 当我这样做时 sud
  • 实现 AsyncTask 的技巧

    大家好 我有一个应用程序 可以在位图上放置一个圆圈 并使用滑动条更改圆圈内像素的 RGB 值 我想使用 asynctask 来加速更改像素的过程 我不知道从哪里开始 我在活动文件底部注释掉了一些代码 因为这是我第一次尝试 谁能指出我如何实现
  • 使用 OpenCV 进行头部(和肩部)检测

    如果我问了一个太新手的问题 请提前道歉 我是 OpenCV 的初学者 我已经完成了一些教程 但我还没有很好地掌握它的概念 问题 如何使用 OpenCV 进行头部检测 不是面部检测 例如在公共汽车或房间内的照片中 注意 我不想做人脸检测 只需
  • 如何使用 firestore 的安全规则验证数组值?

    我有一个创建以下 JSON 结构的表单 reviewed false title Just a title user UYV9TRKXfNW1NeCyFyfjZfagJ8B items age 33 experience Newcomer
  • 在 Laravel Blade 中检索外部 api 的数据

    public function RetrieveStatus response Http get https exemple exemple com fr api
  • 在这种情况下,一般异常处理不是那么糟糕吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在下面的代码中 我尝试发送一组通知 我想知道通知是否已成功发送 稍后将其放入数据库中 这样就不再发送它 我抓到了是不是很糟糕Exception这
  • Django - 检查用户是否对每个网址进行了身份验证

    在我的 html 上 我可以使用以下语法检查用户是否已登录 if user is authenticated div div else p Please Log in p endif 但是 如果我想检查我正在渲染的每个 html 文件的用户
  • “调用/应用”和“绑定”之间有什么区别[重复]

    这个问题在这里已经有答案了 var obj x 81 getX function console log this x var getX obj getX bind obj use obj as this getX 81 var getX
  • HttpDelete 中的 setEntity

    HttpDelete 是否包含 setEntity 等方法 如 HttpPost 或 HttpPut 当我使用 HttpPost 时 我会做这样的事情 httppost setEntity new UrlEncodedFormEntity
  • Rails 3 序列化问题

    我有一个在 ror 2 3 x 上运行良好的应用程序 我在升级到 Rails 3 时遇到序列化问题 代码看起来像这样 class PaymentTransaction lt ActiveRecord Base serialize respo
  • Spring Boot Actuator - 多个健康端点

    有没有办法在 Spring Boot 应用程序上支持多个健康端点 原因如下 标准执行器运行状况检查很棒 内置检查很棒 自定义选项很棒 对于单个用例 报告一般应用程序运行状况 但我想要可以从 AWS Elastic Load Balancer
  • 如何在 iPhone/Mac 上使用 CoreAudio 合成声音

    我想在 iPhone 中播放合成声音 我不想使用预先录制的声音并使用 SystemSoundID 来播放现有的二进制文件 而是对其进行合成 部分原因是我希望能够连续播放声音 例如 当用户的手指位于屏幕上时 而不是一次性的声音样本 如果我想合
  • PyMongo 的批量写入操作功能与生成器

    我想使用 PyMongo 的bulk http api mongodb org python current examples bulk html执行写操作的写操作功能 分批进行 以减少网络往返次数并提高吞吐量 我还发现here http
  • SQL 2008 - INFORMATION_SCHEMA 视图中的外键约束

    我正在编写一个 C 单元测试 用于根据目标数据库 始终是 SQL 2008 以及数据映射到的类来验证 ORM 类的字符串属性 检查指定的外键在数据库中是否有效很容易 static private bool ConstraintExsits
  • 指向非静态成员函数的指针“正式”不被视为指针

    我碰到this https stackoverflow com a 71870413 12002570其中指出 成员函数指针不是指针 指向非成员函数 包括静态成员函数 的指针是指针 上面的引用似乎表明指向非静态成员函数的指针不是指针 同样
  • 如何在 Xcode 4.5“命令行工具”项目中设置工作逻辑单元测试目标?

    无法为特定场景设置单元测试 这就是我正在尝试的 在 Xcode 4 5 中 我创建了一个简单的 OSX 命令行工具 应用项目 基金会 请注意 Xcodedoes not提供自动将单元测试添加到 命令行工具 项目的选项 所以请不要建议勾选复选
  • 用于阻止 Swift 的 Safari 内容的多个过滤器

    我正在构建一个简单的内容阻止应用程序 它有效 但我想应用过滤器 要阻止哪个网站 不阻止哪个网站 UISwitches 保存到NSUserDefaults 因为内容阻止扩展使用 json 所以我不清楚如何选择多个 json 文件同时运行 有什
  • GAE TextProperty 中的“=”符号

    通过 POST 添加文本时 我在文本属性中遇到了奇怪的附加符号 例如 队伍带着不可阻挡的愤怒回来了 他们被警察 阿朗佐和尤马追赶 Vinnie Shorty 和 Kiro 92 的技能将受到考验 该文本中不应有任何 符号 我的代码是 cla
  • 具有自定义网络的 Docker swarm

    我正在尝试弄清楚如何在 Docker 中正确使用 Swarm 模式 首先 我尝试在 2 个工作人员和管理人员计算机上运行容器 而不指定自定义网络 因此我使用默认的入口覆盖网络 但是 如果我使用入口网络 由于某种原因我无法解析tasks my