如何在 Docker Ubuntu 镜像上验证 Google Cloud SDK?

31

我有些困惑如何在Docker容器上进行gcloud SDK的身份验证。目前,我的Docker文件包括以下内容:

#Install the google SDK
RUN curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz
RUN mkdir -p /usr/local/gcloud
RUN tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz
RUN /usr/local/gcloud/google-cloud-sdk/install.sh
RUN /usr/local/gcloud/google-cloud-sdk/bin/gcloud init

然而,我不确定如何进行身份验证?当我在我的机器上运行gcloud auth application-default login时,它会在 Chrome 中打开一个新标签页,要求我登录。如果它在容器中打开 Google Chrome 的新标签页,我应该如何输入我的凭据呢?

2个回答

25

在设置您的Docker容器时,您可能会考虑使用deb包,就像Docker Hub上所做的那样。

尽管如此,您不应该运行gcloud initgcloud auth application-default logingcloud auth login这些交互式命令将启动浏览器。要向容器提供凭据,请提供服务帐户密钥文件。

您可以从Cloud控制台下载一个:https://console.cloud.google.com/iam-admin/serviceaccounts/project?project=YOUR_PROJECT或使用gcloud命令创建它。

gcloud iam service-accounts keys create

查看参考指南

无论哪种方式,一旦拥有密钥文件,请将其添加到容器中并运行。

gcloud auth activate-service-account --key-file=MY_KEY_FILE.json
你现在应该已经设置好了,但如果你想将其用作应用程序默认凭据(ADC),也就是在其他库和工具的上下文中使用它,你需要设置以下环境变量来指向密钥文件:
export GOOGLE_APPLICATION_CREDENTIALS=/the/path/to/MY_KEY_FILE.json

这里需要指出的一件事是,gcloud 工具不使用 ADC,所以如果您稍后更改了您的账户为其他账户,例如通过

gcloud config set core/account my_other_login@gmail.com

其他工具和库将继续通过ADC密钥文件使用旧帐户,但是gcloud现在将使用不同的帐户。


7
命令已更改为 gcloud auth activate-service-account --key-file=MY_KEY_FILE.json。注意,这里的MY_KEY_FILE.json需要替换成您自己的密钥文件名。 - alam
1
将 JSON 凭据添加到容器中不是一个好的做法,我认为 Google 不赞同这种做法。请小心处理此事。 - Luis Parada
@LuisParada 如果您无法将JSON凭据添加到容器中,还有哪些其他选项可用? - Jas
1
@LuisParada 我认为问题在于将凭据嵌入到 镜像 中。 - Paul Calabro
1
我会说下面的答案是正确的。 - Jose Gleeson
另一个选择是工作负载身份联合。不需要创建密钥。 - Aseem

23

您可以将本地的Google SDK凭据映射到图像中。 [来源].

首先使用以下方式登录:

$ gcloud auth application-default login

然后将以下内容添加到您的docker-compose.yaml文件:

volumes:
  - ~/.config/gcloud:/root/.config/gcloud

13
如果您不想共享整个.config目录,那么~/.config/gcloud:/root/.config/gcloud也是可行的。 - Nick Humrich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接