临时容器内的用户Google Cloud凭据?

时间:2017-02-17 20:54:24

标签: google-cloud-platform google-cloud-sdk

我们使用Docker容器完成大部分工作,包括在我们自己的机器上进行开发。这些都是短暂的(例如,每次我们进行测试时都会开始)。

对于AWS,auth很简单 - 我们在我们的环境中拥有密钥,并将这些密钥传递给容器。

我们开始使用Google Cloud服务,而auth路径似乎比AWS更难。在进行本地开发时,gcloud auth login运行良好。但是当在一个短暂的容器中工作时,每次都需要登录过程,而我还没有找到一种方法来使用a)环境变量或b)映射卷来保存用户凭据 - 这是将数据传递给的两种方式容器。

据我所知,唯一的途径是使用服务帐户。但我认为每个人都需要自己的服务帐户,并且需要不断更新该帐户的权限以与自己的帐户保持一致。

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

我有同样的问题,但是我正在使用docker-compose。通过在docker-compose.yml中添加以下内容来解决此问题:

    volumes:
      - $HOME/.config/gcloud:/root/.config/gcloud

答案 1 :(得分:1)

使本地容器看到gcloud凭据最简单的方法可能是将application default credentials的文件系统位置映射到容器中。

首先,做

gcloud auth application-default login

然后,将容器作为

运行
docker run -ti -v=$HOME/.config/gcloud:/root/.config/gcloud test

这应该有效。我尝试使用像

这样的Dockerfile
FROM node:4
RUN npm install --save @google-cloud/storage
ADD test.js .
CMD node ./test.js

test.js文件一样

var storage = require('@google-cloud/storage');
var gcs = storage({
    projectId: 'my-project-515',
});

var bucket = gcs.bucket('my-bucket');
bucket.getFiles(function(err, files) {
  if (err) {
    console.log("failed to get files: ", err)
  } else {
    for (var i in files) {
      console.log("file: ", files[i].name)
    }
  }
})

它按预期工作。