工人之间的Docker Swarm覆盖网络

问题描述 投票:0回答:1

尽管我还看到了与此主题相关的其他问题,但似乎没有一个问题与我所遇到的问题足够接近。这是我的Swarm中的Docker版本信息:

Server: Docker Engine - Community
Engine:
Version:          19.03.8
API version:      1.40 (minimum version 1.12)
Go version:       go1.12.17
Git commit:       afacb8b
Built:            Wed Mar 11 01:25:42 2020
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          1.2.13
GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
runc:
Version:          1.0.0-rc10
GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version:          0.18.0
GitCommit:        fec3683

我一直尝试使用stack从使用我定义的覆盖网络的docker-compose文件进行部署(例如:docker network create -d overlay some_network --attachable ),当我的服务全部启动时,我观察到运行docker network inspect some_network的Worker上的一致行为,即列出的容器仅枚举了部署中的一项服务(有3个服务,每个服务包含1个任务)。网络检查的peers部分始终显示所有Worker。

奇怪的是,如果我执行docker service ps service_name,我确实看到服务是在我的工作人员之间安排的。接下来是docker service inspect service_name,在“网络”部分中看到的是用户创建的覆盖网络的ID,并且在VirtualIPs部分中,用户创建的覆盖网络的CIDR中也有一个IP以及用于入口的IP。为每个部署的服务执行此操作会得到相似的结果:每个服务都连接了覆盖网络以及覆盖网络中的IP。

关于为什么会发生这种情况以及如何纠正的任何想法?让我知道是否所有人都希望我提供docker-compose.yml文件。

docker docker-swarm docker-stack
1个回答
0
投票

即使覆盖网络处于群集范围内,其特定实例也会在第一次创建使用它的容器时在节点上创建。这将使该节点出现在docker network inspect的“ peers”部分中。对于每个节点,覆盖网络实例将知道与其连接的本地容器以及参与此覆盖网络的对等方的列表。

您可以自己查看行为:创建一个新的覆盖网络,对其进行检查。使用单个复制服务创建一个简单的docker-compose.yml,该复制服务具有将其粘贴到任何工作程序节点的放置约束。在部署堆栈之前,请检查工作节点上是否存在网络。部署服务后,然后检查工作节点上的网络。检查您在其上创建的主节点上的网络。

入口网络本身就是一个特殊的覆盖网络。如果您以入口模式发布服务的端口,则任务创建的容器将位于入口网络和自定义网络中。

© www.soinside.com 2019 - 2024. All rights reserved.