6

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

对于 AWS,身份验证很简单——我们的环境中有我们的密钥,这些密钥被传递到容器中。

我们开始使用 Google Cloud 服务,而授权路径似乎比 AWS 更难。在进行本地开发时,gcloud auth login效果很好。但是在临时容器中工作时,每次都需要登录过程,而且我还没有找到一种方法来使用 a) 环境变量或 b) 映射卷来持久化用户凭据——这是将数据传递到的两种方式容器。

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

有没有更好的办法?

4

2 回答 2

7

让本地容器看到 gcloud 凭据的最简单方法可能是将应用程序默认凭据的文件系统位置映射到容器中。

首先,做

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)
    }
  }
})

它按预期工作。

于 2017-02-18T18:45:02.783 回答
2

我有同样的问题,但我使用的是 docker-compose。通过添加以下内容解决了这个问题docker-compose.yml

    volumes:
      - $HOME/.config/gcloud:/root/.config/gcloud
于 2020-08-05T13:30:04.897 回答