docker - 如何在 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 声望,我无法在此处发表评论。
解决方案
如果您的容器托管在 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>
推荐阅读
- c# - How to either uncomment or add a line to an XML/ config file?
- html - 为什么 ngb-bootstrap Collapse control 的切换折叠按钮会折叠整个动态生成的卡片集?
- scala - Type mismatch creating Scala Array/Seq of Generic type
- php - laravel BelongsToMany 分页
- sql - 如何将多行汇总成单行和单列
- c# - 'SQLite Error 1: 'near "(": syntax error'.' with cross apply in query?
- flutter - 如何在父窗口小部件的回调函数中使用 Navigator.of(context)?
- excel - Multiple criteria formula should be returning multiple matches. But is only returning the first match
- scala - 第一个 jar 创建和执行问题
- kubernetes - Pull images from local (insecure) registry on kind cluster