1

Portainer API有这个端点https://{portainer_url}/api/stacks/{id}

返回模式(使用示例中的响应)

{
  "Id": "myStack_jpofkc0i9uo9wtx1zesuk649w",
  "Name": "myStack",
  "Type": 1,
  "EndpointID": 1,
  "EntryPoint": "docker-compose.yml",
  "SwarmID": "jpofkc0i9uo9wtx1zesuk649w",
  "ProjectPath": "/data/compose/myStack_jpofkc0i9uo9wtx1zesuk649w",
  "Env": [
    {
      "name": "MYSQL_ROOT_PASSWORD",
      "value": "password"
    }
  ]
}

我想通过使用响应返回的“SwarmID”来获取节点 url。

但是检查 SwarmID 从 中返回docker node ls,响应中没有匹配的 SwarmID。

我想知道 Portainer 返回的 SwarmID 到底是什么?或任何其他方式可以帮助我获得特定堆栈部署到的节点?

4

1 回答 1

1

SwarmID 可以在 swarm 初始化后查看,在 manager 节点中使用 docker info 命令,我们可以在 docker 文档中看到

$ docker info
<...>
ClusterID: 9vs5ygs0gguyyec4iqf2314c0
Managers: 1
Nodes: 1
Data Path Port: 7777
<...>

这个clusterId对应portainer api中需要创建stack时请求的swarmId:https ://app.swaggerhub.com/apis/deviantony/Portainer/1.23.2/#/stacks/StackCreate

您可以通过 portainer api 向 docker info 发出 GET 请求:

request({
        url: PORTAINER_URL + '/api/endpoints/' + ENDPOINT_ID + '/docker/info',
        method: 'GET',
        headers: {
            'Content-Type': ' application/json',
            'Authorization': 'Bearer ' + bearer
        }
    }, function (error, response, body) {...});
于 2022-01-18T08:07:07.813 回答