我有一个服务,它要求它可以连接到自己的其他实例以建立仲裁。
服务有一个环境变量,如:
initialDiscoverMembers=db.1:5000,db.2:5000,db.3:5000
他们永远找不到对方。我已经尝试登录到其他容器和ping其他服务。如ping redis.1
,它不起作用。
在Docker (swarm)中是否有一种方法可以获得用于连接的增量主机名?我看了endpoint_mode: dnsrr,但这似乎不是我想要的。
我想我可能不得不创建三个单独的服务实例,并为它们命名不同的东西,但这似乎太麻烦了。
您不能使用增量host.<id>
独立引用每个容器,因为Swarm上的DNS解析是基于服务完成的;你能做的就是根据每个容器的Swarm槽位给它添加一个hostname
别名。
例如,现在您正在使用db
服务,因此您可以添加:
version: '3.7'
services:
db:
image: postgres
deploy:
replicas: 3
hostname: "db-{{.Task.Slot}}"
ports:
- 5000:5432
在这种情况下,由于每个Swarmtask
中的所有容器都在同一个网络中,您可以通过db-1
,db-2
和db-3
对它们进行寻址。