首页 > 解决方案 > 访问 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 运行应用程序来获得?

标签: node.jsdockerdocker-composedocker-swarmdocker-api

解决方案


正如docker docs所说:

Worker 节点参与 Raft 分布式状态,不做调度决策,也不服务于 swarm 模式的 HTTP API

可能的解决方案:

  • 您可以考虑在集群拓扑中仅运行管理器节点。

  • 或者,您可以为基于 node.js 的 docker 服务使用放置约束 --constraint node.role==manager

这样,您的服务容器将仅在服务于 swarm 模式 HTTP API 的管理器节点上运行。


推荐阅读