我希望使用我的key.json
文件在docker容器内设置GOOGLE_APPLICATION_CREDENTIALS,但我不想将此文件复制到我的容器中。
我希望使用我的key.json
文件在docker容器内设置GOOGLE_APPLICATION_CREDENTIALS,但我不想将此文件复制到我的容器中。
docker run \
-e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/[FILE_NAME].json \
-v $GOOGLE_APPLICATION_CREDENTIALS:/tmp/keys/[FILE_NAME].json:ro \
gcr.io/[PROJECT_ID]/[IMAGE]
ro
表示只读。 - northtree对于任何正在使用当前工作目录中的密钥文件的人:
docker run \
-e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/[FILE_NAME].json \
-v $(pwd):/tmp/keys/[FILE_NAME].json:ro \
gcr.io/[PROJECT_ID]/[IMAGE]
我也曾经遇到过这个问题。 如果你想在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
我在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 中即可。
如果你想使用docker run设置凭据,你可以使用--env-file标志提供文件,或者使用--env参数提供参数。
棘手的部分是,由于它是json格式,你需要使用cat命令读取json文件,使用grep命令查找你要查找的变量,将冒号替换为等号,并删除括号。这是很多工作。
相反,为什么不创建一个文件,在文件中使用键值对的表示方式,并使用以下命令提供该文件:
docker run --env-file my_config_file ....