gcloud docker每次执行刷新访问令牌致卡顿问题求助
结合你描述的环境(macOS、Google Cloud SDK 183.0.0 beta 2017.09.15,组件版本bq 2.0.27、core 2017.12.08、gcloud、gsutil 4.28、kubectl)和遇到的问题,我整理了几个可能的原因和排查方向:
令牌缓存异常
虽然登录流程能正常获取令牌,但gcloud docker可能没有正确读取缓存的令牌文件。macOS下gcloud的令牌缓存通常存在~/.config/gcloud/credentials.db或~/.config/gcloud/access_tokens.db中,你可以先备份这两个文件,然后删除它们,重新执行gcloud auth login登录,再测试gcloud docker命令是否还会重复刷新令牌。同时要确保这些文件所在的目录有正确的读写权限,避免因为权限问题导致无法读取缓存。SDK与组件版本不兼容
你使用的是beta版SDK(2017.09.15发布),但core组件版本是2017.12.08,两者版本时间跨度较大,可能存在兼容性问题。beta版本本身稳定性就不如稳定版,建议尝试切换到稳定版SDK:先卸载当前的beta版,再安装对应时期的稳定版,或者执行gcloud components update --channel=stable尝试将组件和SDK同步到稳定渠道的版本,之后再测试卡顿问题是否消失。gcloud docker命令本身的缺陷
在较新的GCloud SDK版本中,gcloud docker已经被gcloud auth configure-docker替代,你使用的旧beta版中这个命令可能存在令牌获取逻辑的bug。可以尝试绕过这个包装命令,手动配置docker凭证:- 先执行
gcloud auth print-access-token获取当前有效的access token - 运行
docker login -u oauth2accesstoken -p $(gcloud auth print-access-token) gcr.io完成登录
之后直接使用docker pull/push等命令操作GCR镜像,看看是否还会出现卡顿,以此判断问题是否出在gcloud docker的包装逻辑上。
- 先执行
网络连接问题
刷新access token卡顿30秒,很可能是本地网络与Google认证服务器的连接延迟过高。你可以排查:- 是否开启了代理,代理配置是否正确,尝试关闭代理后测试
- 本地DNS解析是否正常,可以尝试切换到公共DNS(比如8.8.8.8)再测试
- macOS的防火墙或第三方安全软件是否拦截了gcloud的网络请求,临时关闭后看看卡顿是否缓解
内容的提问来源于stack exchange,提问作者axsuul

