node.js - 访问 docker swarm worker 节点上的服务列表
问题描述
我正在使用 docker-API 模块来访问服务列表和副本信息。它在 swarm 模式和管理节点上工作得更好。但是,如果应用程序在工作节点上运行,它会给我以下错误“意外 - 此节点不是 swarm 管理器。使用“docker swarm init”或“docker swarm join”将此节点连接到 swarm 并重试”。以下是我的代码,
const Docker = require('node-docker-api').Docker
const docker = new Docker({ socketPath: '/var/run/docker.sock' })
const services = await docker.service.list()
是否可以通过向工作节点提供任何选项或权限来获取两个节点上的服务列表?另外是否可以通过使用 docker-compose 或 kubernetes 运行应用程序来获得?
解决方案
正如docker docs所说:
Worker 节点不参与 Raft 分布式状态,不做调度决策,也不服务于 swarm 模式的 HTTP API。
可能的解决方案:
您可以考虑在集群拓扑中仅运行管理器节点。
或者,您可以为基于 node.js 的 docker 服务使用放置约束
--constraint node.role==manager
这样,您的服务容器将仅在服务于 swarm 模式 HTTP API 的管理器节点上运行。
推荐阅读
- node.js - 即使在简单的节点 JS 应用程序中也创建了活动句柄但不销毁
- encryption - 如何在传输时加密 LAN 或 Internet 中的数据?
- vuejs2 - vue router - 在哪里存储路由名称?
- node.js - 多个队列在一个通道中消耗
- javascript - 点击时替换 iFrame src?
- php - 403 Forbidden Access to this resource is denied on server-Laravel 5.7
- python - 需要帮助让代码通过网站循环
- linux - 当更多线程/进程占用内核时性能下降,即使并非所有内核都被使用
- libgdx - 粒子发射器类中的particleEmitter.start() 方法有什么作用?
- r - Shiny renderUI not Selectinput 自行停止更新