在docker堆栈中的全局部署服务上dynamic分配networking别名

我使用docker swarm,在每个swarm节点上运行couchbase。 将couchbase节点连接到couchbase群集时,节点必须知道群集上的每个节点(可达IP或主机名称)。 当客户端请求任何数据时,它向集群中的任何节点请求,并且该节点告诉客户端哪个节点具有该数据。 所以客户端去了被告知要求获取数据的节点。

相同的IP /主机名节点使用彼此之间的连接被发送到客户端,以便他们访问右侧节点上的数据。 因此,我不能告诉节点通过私有IP泊坞窗将它们分配给对方。 否则,他们会发送给客户这些私人IP访问正确的节点,所以客户端不会到达他们。

所以,我在堆栈的默认networking上为集群中的每个节点分配一个别名。 我将每个couchbase节点分配给与docker主机(swarm节点)具有相同主机名的别名。 因此,如果一个群节点可以通过couch1.example.com从互联网到达,则群集上的所有couchbase节点将通过别名couch1.example.com到达该节点,从而通过私有IP到达该节点。 然后,节点通过与客户端相同的主机名访问其他节点,所以没有问题。 但是这在理论上是我在实践中没有做到的。 由于我试图dynamic分配别名(参见下面的组合文件),但是我运行docker stack up命令的swarm主节点的相同别名被分配给每个节点。

我正在使用的撰写文件是这样的:

version: '3.2' services: db: image: my.own.registry/database/couchbase:1.0.0 ports: - target: 8091 published: 8091 protocol: tcp mode: host - target: 8093 published: 8093 protocol: tcp mode: host - target: 11210 published: 11210 protocol: tcp mode: host networks: default: aliases: - ${HOSTNAME} volumes: - /some/path/couchbase/opt/couchbase/var:/opt/couchbase/var deploy: mode: global 

我已经尝试了很多东西,但仍然没有得到解决scheme。 有没有机会得到容器将在最后运行的主机的环境variables?

非常感谢!

Interesting Posts