linux - Docker Swarm覆盖网络 - 容器无法通信
问题描述
Tl;dr:使用覆盖网络的 Docker swarm 容器无法互相 ping
我正在尝试创建一个群,其中包括我的桌面(带有 Docker 桌面的 Windows)和一个 Ubuntu VM(群管理器,在我的台式电脑上)。
创建群体并加入它工作正常。我开始创建一个可附加的覆盖网络,它应该使用覆盖驱动程序跨越我的所有节点。我创建了一个随机 nginx 服务,使用全局模式和我的覆盖网络使网络在我的所有节点上可用。
为了测试连接性,我创建了两个 ubuntu 容器(一个在 Ubuntu 上,一个在我的 Windows 上)并将它们加入网络。问题是容器无法互相 ping。我还在我的 Windows 和 Ubuntu VM 上打开了 swarm 所需的端口(2376、2377、7946、4789)。
适用于 Linux 的 Docker 版本:
Version: 19.03.6
API version: 1.40
Go version: go1.12.16
适用于 Windows 的 Docker 版本:
Version: 19.03.5
API version: 1.40
Go version: go1.12.12
你知道我怎样才能使连接工作吗?
解决方案
发现你的问题,因为我在类似的情况下。
该文档指出,覆盖网络默认情况下是加密的,您不应尝试将 Windows 节点附加到加密网络:
不要将 Windows 节点附加到加密的覆盖网络。
Windows 不支持覆盖网络加密。如果 Windows 节点尝试连接到加密覆盖网络,则不会检测到错误但节点无法通信。
https://docs.docker.com/network/overlay/#encrypt-traffic-on-an-overlay-network
推荐阅读
- pytorch - 使用 huggingface 的标记器手动填充 BatchEncodings 列表
- java - ElasticSearch 获取具有一个值但来自多个位置的数据
- c++ - 重载时如何选择正确的向量插入()函数?
- emacs - 如何在emacs org-mode中更改“:results输出代码”结果的语言
- postgresql - 如何为 liquibase 设置角色以用于创建 DATABASECHANGELOGTABLE
- xcode - Xcode:顶部剪辑的 Playground Live View 导航控制器
- python - “AttributeError:模块'_version'没有属性'version'”(虽然mysql连接器看起来已经安装)
- unix - 从 HDFS FS 获取文件名,其中文件包含特定字符串
- r - 如何在数据框的列中嵌套表?
- react-native - 如何将参数传递给使用 useRoute() 的屏幕