在 Docker 中设置 GOOGLE_APPLICATION_CREDENTIALS

31

我希望使用我的key.json文件在docker容器内设置GOOGLE_APPLICATION_CREDENTIALS,但我不想将此文件复制到我的容器中。


你想使用什么?有很多方法。其中一个是使用Docker Volume:https://docs.docker.com/storage/volumes/ 另一个是Docker Secrets:https://blog.docker.com/2017/02/docker-secrets-management/ - John Hanley
我想在使用docker run时设置凭据。 - katakuri
你阅读了我提供的链接吗?第一个链接展示了如何使用Docker运行并附加主机上的目录,这样你就可以在容器内部读取文件。 - John Hanley
5个回答

28

谢谢。我正在寻找这个。 - PanwarS87
我们本地需要准备好 GOOGLE_APPLICATION_CREDENTIALS 吗?我从未在本地设置过 GOOGLE_APPLICATION_CREDENTIALS。你知道 -v 中的 'ro' 是什么意思吗? - khusnanadia
1
@khusnanadia,你必须通过认证。 ro 表示只读。 - northtree
此外,您可以在 Dockerfile 中定义环境变量。并使该命令变得更短。 - DenisOgr
更好的链接 https://cloud.google.com/run/docs/testing/local#docker-with-gcp-access - howMuchCheeseIsTooMuchCheese

1

对于任何正在使用当前工作目录中的密钥文件的人:

docker run \
  -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/[FILE_NAME].json \
  -v $(pwd):/tmp/keys/[FILE_NAME].json:ro \
  gcr.io/[PROJECT_ID]/[IMAGE]

0

我也曾经遇到过这个问题。 如果你想在Windows上解决这个问题:

首先,在Windows中添加一个系统变量GOOGLE_APPLICATION_CREDENTIALS: enter image description here

确保存在指向Json文件的路径。

如果cmd正在运行,请重新启动它。在cmd中执行echo %GOOGLE_APPLICATION_CREDENTIALS%命令,以确保正确设置了系统变量。

然后,您应该执行一个命令,该命令在容器中创建一个Json文件并设置一个环境变量,该变量指向此Json文件。-v标志创建此Json文件,语法为path_to_your_json_file(here we put a system variable we set earlier):path_to_file_in_a_container_we_want_to_create:rights(ro means read only). -e标志在容器中创建一个指向我们使用-v标志设置的Json文件的变量(-v标志值的第二部分是该标志的值)。

因此,最终命令可能如下所示:

docker run -e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/application_default_credentials.json -v %GOOGLE_APPLICATION_CREDENTIALS%:/tmp/keys/application_default_credentials.json:ro [other flags] image_name:image_tag

0

我在https://dev59.com/ulMI5IYBdhLWcg3wDnOG#59727132中使用了类似norththree的东西。

但我不想一直输入FILE_NAME:

   docker run \
     -e GOOGLE_APPLICATION_CREDENTIALS=$GOOGLE_APPLICATION_CREDENTIALS \
     -v $GOOGLE_APPLICATION_CREDENTIALS:$GOOGLE_APPLICATION_CREDENTIALS:ro \
     gcr.io/[PROJECT_ID]/[IMAGE]

这将在 Docker 容器中的相同路径上挂载凭据文件,就像在容器外部一样。唯一的优点是您不必弄清楚 FILE_NAME,因此您可以将其放入 README 中,您的同事只需将其复制并粘贴到他们的 shell 中即可。


-1

如果你想使用docker run设置凭据,你可以使用--env-file标志提供文件,或者使用--env参数提供参数。

棘手的部分是,由于它是json格式,你需要使用cat命令读取json文件,使用grep命令查找你要查找的变量,将冒号替换为等号,并删除括号。这是很多工作。

相反,为什么不创建一个文件,在文件中使用键值对的表示方式,并使用以下命令提供该文件:

docker run --env-file my_config_file ....

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