Hub*_*bro 10 networking dns docker docker-swarm
我正在尝试在 Docker Swarm 中部署服务。我无法让容器始终连接到不同节点上的容器。
假设我正在构建一个 GlusterFS 池;我需要在每个容器中打开一个终端并将 gluster 守护进程添加到池中。我如何引用池中的其他容器?目前我正在使用 IP 地址,但是如果容器死亡并重新创建怎么办?据我所知,不能保证新容器将具有相同的 IP 地址。我可以使用嵌入式 DNS 服务器来引用其他容器,但我似乎只能将容器名称和容器 ID 解析为 IP 地址,如果容器死亡并重新创建,这两者都会改变,因此没有意义。
我不应该能够将其他容器的主机名解析为它们的 IP 地址吗?我以为会,但事实并非如此。
我的难题有什么解决方案吗?(我觉得我可能会错误地使用服务,在这种情况下,我应该在每个节点上手动创建一个容器。)
Mur*_*mel 10
根据您的具体情况,您必须使用不同的解决方案:
服务内主机名解析
问题:您有同一个服务的多个容器(/副本)serviceX,例如:
a1b3d130275a带有主机名的容器serviceX.1.nq4rjbae65040b1cada6带有主机名的容器serviceX.2.m9wl1f1r944704427b9e带有主机名的容器serviceX.3.3d08baql现在,您要从容器一 ( ) 中检索第二个 ( serviceX.2.m9wl1f1r) 和第三个 ( serviceX.3.3d08baql) 容器的主机名serviceX.1.nq4rjbae。
Docker 提供了一种称为容器发现的解决方案,它使用针对 的 DNS 查询tasks.$serviceName,例如:
nslookup tasks.serviceX
[...]
Name: tasks.serviceX
Address 1: 10.0.0.205 a1b3d130275a (<- resolved locally by /etc/hosts)
Address 2: 10.0.0.206 serviceX.2.m9wl1f1r
Address 3: 10.0.0.207 serviceX.3.3d08baql
Run Code Online (Sandbox Code Playgroud)
还有关于使serviceX.{1,2,3}可解析并因此创建可预测的主机名的讨论。¹ ² ³ ?但是到目前为止,这些都没有实现,所以这个解决方案只在运行时有效。
注意:使用模板功能(如docker service create ... --hostname {{.Service.Name}}.{{.Task.Slot}})设置主机名将使主机名在本地可预测,但其他容器无法解析它们。
服务间主机名解析
问题:您有多个不同服务的容器serviceX,serviceY。但每个服务只有一个容器,例如:
a1b3d130275a带有主机名的容器serviceX.1.nq4rjbae65040b1cada6带有主机名的容器serviceY.2.m9wl1f1r并且您想serviceX从一个服务 ( serviceY)连接到另一个服务 ( )的容器,反之亦然。你只需要使用--name参数:
docker service create --name=serviceX serviceX
docker service create --name=serviceY serviceY
Run Code Online (Sandbox Code Playgroud)
你可以依靠该容器a1b3d130275a将是主机名解析serviceX和容器65040b1cada6的主机名serviceY。
参考:
| 归档时间: |
|
| 查看次数: |
7208 次 |
| 最近记录: |