docker swarm中容器之间的通信

2024-02-22

我想在 docker swarm 模式下通过 WebSocket 连接在主节点和工作节点之间进行通信。

工作节点应该已到达主节点。 连接失败。

另外,我想通过 http 从我的主机连接到主节点。连接也失败。

这是我的docker-compose.yml

version: '3'
services:
  master:
    image: master
    build:
      context: .
      dockerfile: ./docker/master/Dockerfile
    env_file:
      - ./config.env
    command: ['node', './src/master/']
    ports:
      - 8080:8080
    networks:
      - webnet
    deploy:
      replicas: 1
      resources:
        limits:
          cpus: "0.2"
          memory: 200M
      restart_policy:
        condition: none

  worker:
    image: worker
    build:
      context: .
      dockerfile: ./docker/worker/Dockerfile
    env_file:
      - ./config.env
    command: ['node', './src/worker/']
    deploy:
      replicas: 10
      resources:
        limits:
          cpus: "0.1"
          memory: 100M
      restart_policy:
        condition: none
    networks:
      - webnet
    depends_on:
      - master

networks:
  webnet:

我用以下方法创建群:

docker swarm init
docker-compose build --no-cache
docker stack deploy -c docker-compose.yml ${stack_name}

我尝试通过以下方式到达主节点:

curl http://localhost:8080/result

and get

curl: (7) Failed to connect to localhost port 8080: Connection refused
Some more details about master node:

Env:

MASTER_PORT=3000
MASTER_HOST=localhost
MASTER_HTTP_PORT=8080

启动websocket服务器的代码:

const wss = new WebSocket.Server({ host: config.masterHost, port: config.masterPort }, (err) => {
  if (err != null) {
    throw err
  }
  console.log(`Web Socket server started on address ws://${config.masterHost}:${config.masterPort}`)
});

启动http服务器的代码:

server.listen(config.masterHttpPort, config.masterHost, (err) => {
    if (err != null) {
      throw err
    }
    console.log(`Http server started on address http://${config.masterHost}:${config.masterHttpPort}`);
  });
Some more details about worker node:

Env

MASTER_SERVICE_HOST=master
MASTER_PORT=3000

连接websocket客户端到主节点的代码:

const masterUri = `ws://${config.masterServiceHost}:${config.masterPort}`;
console.log(`Connecting to ${masterUri}`);
const ws = new WebSocket(masterUri, {perMessageDeflate: false});

我真的很困惑,因为当我使用 docker-compose (不是在群模式下)运行应用程序时,一切都运行良好。

但在群体模式下,我都无法到达

通过 http 从主机获取主节点

我也无法到达

主节点与工作节点通过 websocket 连接

我怀疑我错误地配置了 docker 网络。

日志来自master node:

Process started with config: {
  "grouperFile": "./src/operations/group.js",
  "initialDelay": 10,
  "mapperFile": "./src/operations/map.js",
  "masterHost": "localhost",
  "masterHttpPort": 8080,
  "masterPort": 3000,
  "masterServiceHost": "master",
  "slaveReplicationFactor": 1
}
Web Socket server started on address ws://localhost:3000
Http server started on address http://localhost:8080

另外,一些日志来自worker node:

Process started with config: {
  "grouperFile": "./src/operations/group.js",
  "initialDelay": 10,
  "mapperFile": "./src/operations/map.js",
  "masterHost": "master",
  "masterHttpPort": 8080,
  "masterPort": 3000,
  "slaveReplicationFactor": 1
}
Connecting to ws://master:3000
events.js:174
      throw er; // Unhandled 'error' event
      ^

Error: getaddrinfo EAI_AGAIN master master:3000
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:57:26)
Emitted 'error' event at:
    at ClientRequest.req.on (/app/node_modules/ws/lib/websocket.js:554:10)
    at ClientRequest.emit (events.js:189:13)
    at Socket.socketErrorListener (_http_client.js:392:9)
    at Socket.emit (events.js:189:13)
    at emitErrorNT (internal/streams/destroy.js:82:8)
    at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)
    at process._tickCallback (internal/process/next_tick.js:63:19)

这是你的问题:

Web Socket server started on address ws://localhost:3000
Http server started on address http://localhost:8080

不要绑定到本地主机。绑定到任意IP 0.0.0.0。 或者为了更安全,绑定到hostname -I知识产权 对于容器之外的所有容器来说,它不是本地主机,而是另一个主机,尽管您在同一台计算机上运行。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

docker swarm中容器之间的通信 的相关文章

随机推荐

  • “dispatch()”是什么意思/做什么,为什么当我们有 .then() 和 .catch() 时使用它

    我是 ES6 和高级 javascript 新手 我见过使用 axios http 客户端的代码示例 如下所示 axios xxx then res gt dispatch success res err gt dispatch error
  • 哪个函数在堆栈使用效率和时间方面最好

    我编写了 3 个函数来计算元素在列表中出现的次数 我尝试了各种输入并对其进行了分析 但我仍然不知道哪个函数在堆栈使用效率和时间效率方面是最好的 请帮帮我 Using an accumulator defn count instances1
  • OpenCL - 将树复制到设备内存

    我用 C 代码实现了二叉搜索树 我的每个树节点如下所示 typedef struct treeNode int key struct treeNode right struct treeNode left treeNode t 宿主建造的树
  • NSCollectionView 取消多选

    所以我现在已经对这个主题进行了相当多的调查 但还没有发现任何与之相关的有用信息 我的问题是我创建了一个 NSCollectionView 它的作用类似于图像处理程序 因此您可以在其中放置图像 一次选择一个甚至多个图像 并根据需要删除它们 选
  • 如何在redshift中生成12位唯一编号?

    我的表中有 3 列 即email id rid final id 规则rid and final id If the email id有对应的rid use rid as the final id If the email id没有对应的r
  • for循环中多个异步函数之后的NodeJS回调

    我从 mongodb 获取一个文档 其中包含一个带有该文档注释的数组 评论中是撰写评论的用户的 id 我现在需要根据用户的 id 获取用户名 但遇到了几个问题 我有以下代码 显然 它不起作用 但我希望它能让您了解我想要完成的任务 MORE
  • 找不到类 PHP

    I used 这个推特库 https github com abraham twitteroauth并收到此错误 谁能告诉我哪里出错了 ERROR Fatal error Class Abraham TwitterOAuth Config
  • joomla中如何设置默认语言

    我使用 Joomla 1 5 24 Stable 使用 JoomFish 2 2 3 发布来翻译网站 在 joomfish 语言管理器的内容语言中 我有 3 种语言 en ru 和 ro 默认设置为 ro 激活就是全部 无论浏览器语言如何
  • 如何以编程方式打开 .net 2.0。它是否正确?

    我正在尝试以编程方式打开 安装 Net 2 0 Framework视窗功能 B c Windows 7 及更高版本不允许您手动安装 net 我的客户永远无法从控制面板启用该功能 Windows 7 包含 net 2 0 但 Windows
  • 在动作组合期间访问 Play Framework 路由参数

    我有一个操作想要应用于 Play 应用程序中的多个路线 这些路由对产品执行操作 并且产品可以有多个版本 我希望我的 API 能够正常工作 以便用户可以显式指定版本 通过查询参数 如果他们没有指定版本 我们将为他们从数据库中查找最新版本并对其
  • 最大连接池是否也限制数据库的最大连接数?

    我正在使用 hikari cp 和 spring boot 应用程序 该应用程序有超过 1000 个并发用户 我已经设置了最大池大小 spring datasource hikari maximum pool size 300 当我使用查看
  • 通过socket发送wav文件

    我正在尝试通过套接字发送 wav 文件 我收到错误 TypeError must be string or buffer not instance waveFile wave open WAVE OUTPUT FILENAME rb my
  • Umbraco 7 SEO 标签

    我想在 Umbraco 中创建 SEO 标签的网站 我想知道它是如何做到的 有没有最佳实践文件或建议 我不是 SEO 专家 但希望下面的代码片段可以帮助您入门 Metadata 在页面上我添加了一些属性 如果您按照文档类型 通过继承或通过组
  • 如何处理 Wicket 自定义模型中抛出的异常?

    我有一个带有自定义模型的组件 扩展 wicket 标准模型类 当 Wicket 调用时 我的模型从数据库 Web 服务加载数据getObject 此查找可能会因多种原因而失败 我想通过在带有该组件的网页上显示一条不错的消息来处理此错误 最好
  • 如何使用宏来收集变量名称?

    我想简化以下内容 class A int a int b int c std vector
  • 使用 React Hooks 出现“太多重新渲染”错误

    我在这里遇到了 React Hooks 的困扰 我在网上查找 但无法弄清楚如何使这些示例适应我的代码 我有以下组件会触发 太多重新渲染 错误 const EmailVerification gt const showMessage setS
  • symfony2:找不到AppKernel中包含的类

    我有这个app AppKernel
  • Mongo shell 无法连接到 Azure CosmosDB

    我无法在 Mac 下从 MongoDB Shell 连接到 Azure CosmosDB mongodb api mongo host XXX documents azure com port 10255 username XXX pass
  • 需要 Underscore.js 中 _.bindAll() 函数的解释

    我一直在学习一些backbone js并且我见过很多例子 bindAll 用来 我已经阅读了整个backbone js和underscore js文档页面 试图了解它的作用 但我仍然对它的作用非常模糊 这是下划线的解释 bindAll ob
  • docker swarm中容器之间的通信

    我想在 docker swarm 模式下通过 WebSocket 连接在主节点和工作节点之间进行通信 工作节点应该已到达主节点 连接失败 另外 我想通过 http 从我的主机连接到主节点 连接也失败 这是我的docker compose y