我想通过我的谷歌云平台的服务帐户JSON凭证文件到docker容器,使容器可以访问云存储桶。到目前为止,我尝试在运行命令中将该文件作为环境参数传递,如下所示:
- 使用——env标志:
docker run -p 8501:8501 --env GOOGLE_APPLICATION_CREDENTIALS=/Users/gcp_credentials.json" -t -i image_name
- 使用-e标志,甚至在命令行中导出相同的env变量:
docker run -p 8501:8501 -e GOOGLE_APPLICATION_CREDENTIALS=/Users/gcp_credentials.json" -t -i image_name
但是没有工作,我总是得到以下错误时运行docker容器:
W外部/org_tensorflow/tensorflow/核心/平台/云/google_auth_provider.cc: 184]所有获取Google身份验证承载令牌的尝试都失败了,返回一个空令牌。从文件检索令牌失败,显示"Not发现:无法定位凭证文件。
如何将谷歌凭据文件传递到我个人笔记本电脑上本地运行的容器?
你不能"外部路径,但必须将JSON添加到容器。
我在本地环境中登录gcloud,然后将该json文件作为卷共享到容器的同一位置。
这里有一个关于如何使用相关提取的好帖子:在本地测试容器时使用Google Cloud用户凭据
本地登录要在本地环境中获取默认用户凭据,请执行以下操作必须使用gcloud SDK。您有两个命令来获得身份验证:
gcloud auth login获得所有后续gcloud的身份验证命令gcloud auth应用程序默认登录创建您的ADC在本地,在一个"知名"的地方。
注意凭证的位置
Google auth库尝试通过执行按此顺序检查
查看环境变量
GOOGLE_APPLICATION_CREDENTIALS
的值。如果存在,使用它,否则……查看元数据服务器(仅在Google上)云平台)。如果它返回正确的HTTP代码,使用它,否则如果用户凭据JSON文件存在,则在"众所周知"的位置"知名"地点linux:
~/.config/gcloud/application_default_credentials.json
OnWindows:%appdata%/gcloud/application_default_credentials.json
与容器共享卷
因此,您必须像这样运行本地docker运行命令
ADC = ~/config/gcloud/application_default_credentials。Json docker运行
-e GOOGLE_APPLICATION_CREDENTIALS=/tmp/keys/FILE_NAME。. json
-v ${ADC}:/tmp/keys/FILE_NAME. jsonjson:ro
注意:这只适用于本地开发,在谷歌云平台上,服务的凭据会自动为您插入。
有两种方法:
- 卷:https://docs.docker.com/storage/volumes/
- 秘密:https://docs.docker.com/engine/swarm/secrets/
秘密-使用docker swarm模式
- create docker secrets
- 在容器中使用——secret
优点是,秘密是加密的。当安装到容器中时,秘密被解密。