Google Cloud Datalab本地Docker部署认证问题求助
解决Datalab Docker环境中Application Default Credentials未被识别的问题
我之前也碰到过一模一样的情况,折腾了好一会儿才搞明白——核心问题是Datalab容器里的后台进程没读到你刚生成的凭证,要么是进程没重启加载新凭证,要么是凭证没持久化导致容器重启就丢了。给你两个靠谱的解决办法:
1. 临时修复:重启容器内的Datalab服务
你已经在容器里完成认证了,但Datalab的服务进程是在认证之前启动的,根本不知道新凭证的存在。按这几步来:
- 先进入运行中的Datalab容器的bash:
docker exec -it <你的Datalab容器ID/名称> bash - 重启Datalab服务:
supervisorctl restart datalab
回到notebook重新跑你的BQ查询,应该就能正常读取凭证了。不过这个方法是临时的,容器重启后凭证就没了,适合临时用用。
2. 持久化解决:挂载本地凭证目录到容器(推荐)
想要一劳永逸,最好把本地的gcloud凭证目录挂载到容器里,这样认证一次之后不管容器怎么重启都能用:
- 先在你的本地主机上完成应用默认凭证认证(如果还没做的话):
本地的凭证默认存在gcloud auth application-default login~/.config/gcloud/这个目录里。 - 停掉当前运行的Datalab容器:
docker stop <你的Datalab容器ID/名称> - 重新启动容器,加上目录挂载的参数:
这里的docker run -it -p "127.0.0.1:8080:8080" -v "${HOME}/.config/gcloud:/root/.config/gcloud" google/cloud-sdk-datalab:latest-v参数就是把你本地的凭证目录映射到容器内的对应路径,容器里的Datalab进程直接就能读到凭证了。
最后验证一下
重启容器后,你可以进容器bash里看看凭证文件是不是真的在:
cat /root/.config/gcloud/application_default_credentials.json
能看到内容的话,回到notebook跑你的SQL查询,应该就不会再弹出那个恼人的凭证错误了。
另外别忘了确认一下你的Google账号确实有权限访问publicdata.samples.natality数据集,还有关联的计费项目是正常启用的状态哦。
内容的提问来源于stack exchange,提问作者goose
相关产品推荐
相关产品推荐

