首页 > 解决方案 > 如何在 docker run 命令上将本地 GOOGLE_APPLICATION_CREDENTIALS 添加到 docker?

问题描述

我正在尝试使用使用某些 GCP 服务的应用程序运行 docker 容器。

我已经创建并下载了一个服务帐户 json 密钥,我可以在运行时在 docker 之外运行应用程序

export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/project-credentials-123.json"

在运行应用程序之前。

但是,当我在 docker 中运行应用程序时,GCP 客户端库找不到默认访问密钥。

我正在使用的 docker run 命令如下所示:

docker run -p 8501:8501 -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/project-credentials-123.json -v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/project-credentials-123.json:ro 571a38aaaf15 streamlit run src/app/app.py

571a38aaaf15泊坞窗图像 ID在哪里。

请注意,我将我复制project-credentials-123.json/tmp/keys/以更好地关注https://cloud.google.com/run/docs/testing/local


注意:类似于Set GOOGLE_APPLICATION_CREDENTIALS in Docker,但由于 < 50 声望,我无法在此处发表评论。

标签: dockergoogle-cloud-platform

解决方案


如果您的容器托管在 GCP 上,则无需像这样安装卷并设置密钥,因为您可以使用底层平台的身份。

当我必须在本地使用容器并且我必须在其中注入密钥文件时,我直接注入密钥文件的内容,而不安装卷。像这样,我让我的容器保持无状态并符合 Cloud Run 和 Knative。

FROM....
....
ENV GOOGLE_APPLICATION_CREDENTIALS /tmp/key.json

# Run the web service on container startup.
CMD if [ -z $KEY ] ; then export  GOOGLE_APPLICATION_CREDENTIALS=; else echo $KEY > /tmp/key.json;fi  && ....your usual command...

您设置为 NULL,GOOGLE_APPLICATION_CREDENTIALS否则 Google 库将在查看底层平台标识之前查看是否存在。

然后,我像这样运行我的命令

Docker run -e KEY="$(cat key.json)" <TAG>

推荐阅读