我想将我的 Google Cloud Platform 服务帐户 JSON 凭证文件传递到 Docker 容器,以便该容器可以访问云存储桶。到目前为止,我尝试将文件作为运行命令的环境参数传递,如下所示:
docker run -p 8501:8501 --env GOOGLE_APPLICATION_CREDENTIALS=/Users/gcp_credentials.json" -t -i image_name
docker run -p 8501:8501 -e GOOGLE_APPLICATION_CREDENTIALS=/Users/gcp_credentials.json" -t -i image_name
但是没有任何效果,并且在运行 docker 容器时总是出现以下错误:
W 外部/org_tensorflow/tensorflow/core/platform/cloud/google_auth_provider.cc:184] 所有获取 Google 身份验证不记名令牌的尝试都失败了, 返回一个空令牌。从文件中检索令牌失败,并显示“Not 发现:无法找到凭证文件。”。
如何将 google 凭据文件传递到在我的个人笔记本电脑上本地运行的容器?
我在本地环境中登录 gcloud,然后将该 json 文件作为卷共享在容器中的同一位置。
这里有一篇很棒的文章,介绍了如何使用下面的相关摘录来实现这一点:在本地测试容器时使用 Google Cloud 用户凭据
本地登录
要获取本地环境中的默认用户凭据,您 必须使用 gcloud SDK。您有 2 个命令来获取身份验证:
gcloud auth 登录以在所有后续 gcloud 上进行身份验证 命令 gcloud auth application-default login 创建您的 ADC 本地,在“众所周知”的位置。
记下凭证的位置
Google 身份验证库尝试通过执行以下操作来获取有效凭据 按此顺序检查
查看环境变量
值。 如果存在,则使用它,否则...查看元数据服务器(仅在 Google 上) 云平台)。如果它返回正确的 HTTP 代码,请使用它,否则......看看 如果存在用户凭证 JSON 文件,则位于“众所周知”的位置 “众所周知”的地点是GOOGLE_APPLICATION_CREDENTIALS
在 Linux 上:
开 窗户:~/.config/gcloud/application_default_credentials.json
%appdata%/gcloud/application_default_credentials.json
与容器共享卷
因此,你必须像这样运行本地 docker run 命令
ADC=~/.config/gcloud/application_default_credentials.json \ docker run \
-e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME.json
-v ${ADC}:/tmp/keys/FILE_NAME.json:ro \
注意:这仅适用于本地开发,在 Google Cloud Platform 上,会自动为您插入服务的凭据。
您无法“传递”外部路径,但必须将 JSON 添加到容器中。
有两种方法:
secrets - 使用 docker swarm 模式。
优点是秘密被加密。安装到容器时,秘密将被解密。
对于 Windows 操作系统,可进行以下操作:
从名为“data-platform-pub”的最新镜像创建并运行一个新容器 选项 -v 绑定卷挂载 Google SDK 文件夹 选项 -i 使 STDIN 保持打开状态,即使未连接 选项 -t 分配伪 TTY
docker run -it -v "%appdata%//gcloud"://root/.config/gcloud data-platform-pub:latest
注意:下面的命令更加简单并且也有效:
docker run -it -v“%appdata%//gcloud//application_default_credentials.json”://root/.config/gcloud/application_default_credentials.json data-platform-pub:latest
我在这篇免费的公开文章中有一个关于如何执行此操作的完整详细示例:https://medium.com/@markwkiehl/containerization-using-docker-469a0fa9dd69
请勿设置环境变量 GOOGLE_APPLICATION_CREDENTIALS !!!这会覆盖 ADC 流程。您希望 ADC 流最终使用元数据服务器和您配置的服务帐户模拟来解析所需的凭据。