为什么我的服务无法与 Docker 群的覆盖网络中的其他服务通信?

Why can't my service commmunicate with the other services in the overlay network of my Docker swarm?

我在与 swarm 覆盖网络中其他容器的模式注册表和 kafka-rest 服务通信时遇到问题。

配置我的节点并将它们加入集群后,我使用以下命令创建了一个覆盖网络:

docker network create -d overlay --attachable kafka-net

我使用这些命令创建了每项服务:

https://gist.github.com/jhines2k7/4c9e8d4c2c6ac60a076072cc28fad998

服务运行正常。这是架构注册服务的日志输出:

https://gist.github.com/jhines2k7/39d6c6bc3dea5d1065718e87d7e3710a

swarm 中的所有服务都运行正常:

https://gist.github.com/jhines2k7/dc2ca41ebbf09c9fdf08e6527b72418a

我能够与网络中的其他容器通信:

https://gist.github.com/jhines2k7/c746008e9da79f8e69a668751acfa602

所有命令都是 运行 在 DigitalOcean Droplet 运行ning Ubuntu 17.10 上 Docker 版本 17.12.0-ce docker-机器版本0.14.0

你是基于群还是组合其他人知道有效的设置?

也可以尝试 turning off VIP for all services 所以中间没有 NAT:将 --endpoint-mode: dnsrr 添加到每个创建命令。

我能够通过为 SCHEMA_REGISTRY_LISTENERS 环境变量提供正确的值来解决这个问题。之前,我创建 schema-registry 服务的命令如下所示:

docker service create \
--network=kafka-net \
--name=schema-registry \
-e SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=zk1:22181 \
-e SCHEMA_REGISTRY_HOST_NAME=schema-registry \
-e SCHEMA_REGISTRY_LISTENERS=http://schema-registry:8081 \
--constraint "engine.labels.node.type==webtools" \
confluentinc/cp-schema-registry:4.0.0

注意 SCHEMA_REGISTRY_LISTENERS 环境变量的值。将值从 http://schema-registry:8081 to http://0.0.0.0:8081...

更改后
docker service create \
--network=kafka-net \
--name=schema-registry \
-e SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=zk1:22181 \
-e SCHEMA_REGISTRY_HOST_NAME=schema-registry \
-e SCHEMA_REGISTRY_LISTENERS=http://0.0.0.0:8081 \
--constraint "engine.labels.node.type==webtools" \
confluentinc/cp-schema-registry:4.0.0

我的 schema-registry 服务能够与 swarm 中的其他服务通信。