0

我正在寻找使用 graphQL 来查询 docker machine api 并获取用于反应 docker admin 样式项目的容器列表。我正在使用 dockerode 一个 NPM 模块来发出请求。第一个函数 getCONtainerById 是我通常如何从 rethinkdb 返回一些项目的方式。

我似乎无法弄清楚如何在 docker.listContainers 函数中返回容器数组,因为它仅在范围内定义,并且在 fetchContainers 函数返回的末尾未定义。

import Docker from 'dockerode'
var docker = new Docker({host: 'http://127.0.0.1', port: 52376});

export default {
  getContainerById: {
    type: Container,
    args: {
      id: {type: new GraphQLNonNull(GraphQLID)}
    },
    async resolve(source, {id}, {rootValue}) {
      isLoggedIn(rootValue);
      const container = await r.table('containers').get(id);
      if (!container) {
        throw errorObj({_error: 'Container not found'});
      }
      return container;
    }
  },
  fetchContainers: {
    type: new GraphQLList(Container),
    async resolve(source, {id}, {rootValue}) {
      isLoggedIn(rootValue);
      docker.listContainers(function(err, containers) {

      });

      if (!containers) {
        throw errorObj({_error: 'Container not found'});
      }

      return containers
    }
  }
};

帮助将不胜感激。谢谢你。

4

1 回答 1

1
async resolve(source, {id}, {rootValue}) {
  isLoggedIn(rootValue);
  const containers = await new Promise((resolve, reject) => {
    docker.listContainers((err, containers) => {
      if (err) reject(err);
      resolve(containers);
    });
  })

  if (!containers) {
    throw errorObj({_error: 'Container not found'});
  }

  return containers
}
于 2016-05-03T18:14:55.103 回答