You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在GCE虚拟机实例上用Jupyter访问BigQuery遇“无法访问本地主机”错误

我遇到过好几个用户碰到这个问题,根源其实很简单:你的Jupyter运行在GCE的VM实例上,而认证链接指向的是localhost:8080——这个地址在你本地电脑上指的是自己的机器,但认证服务其实是在VM上监听这个端口,所以本地浏览器自然访问不到。下面给你几个靠谱的解决办法,按优先级推荐:

方法1:使用服务账号密钥(最稳定,适合长期使用)

这是生产环境最常用的方式,不需要每次手动认证:

  • 登录GCP控制台,找到IAM与管理 > 服务账号,创建一个新的服务账号,给它添加BigQuery数据查看者和BigQuery作业用户权限(可根据你的实际需求调整)。
  • 为这个服务账号创建并下载JSON格式的密钥文件,把它上传到你的GCE VM里(可以用scp命令或者Jupyter的文件上传功能)。
  • 在Jupyter代码中导入服务账号认证模块,指定密钥路径后再执行查询:
from google.oauth2 import service_account
import pandas as pd

# 替换成你的密钥文件实际路径
credentials = service_account.Credentials.from_service_account_file('/path/to/your-service-key.json')

Q = "你的BigQuery查询语句"
projecti = "你的GCP项目ID"
R = pd.read_gbq(query=Q, project_id=projecti, dialect='standard', credentials=credentials)
R.head()

方法2:使用无本地Web服务器的认证模式

适合临时测试场景,按照提示的参数操作即可:

  • 在VM的终端中运行以下命令初始化认证:
gcloud auth application-default login --noauth_local_webserver
  • 终端会输出一个授权链接和验证码输入框,你在本地电脑打开这个链接,完成身份验证后会得到一个授权码。
  • 把授权码复制粘贴回VM的终端并回车,之后Jupyter环境会保存这个凭证,再运行pd.read_gbq就不会再弹出浏览器链接了。

方法3:端口转发到本地电脑

通过端口映射让本地浏览器能访问VM的8080端口:

  • 在你本地电脑的终端中运行端口转发命令(替换成你的实例名称和区域):
gcloud compute ssh YOUR_INSTANCE_NAME --zone YOUR_INSTANCE_ZONE -- -L 8080:localhost:8080
  • 保持这个本地终端窗口打开,回到VM的Jupyter里重新运行查询代码。
  • 点击弹出的认证链接,本地浏览器就能正常访问并完成认证流程了。

内容的提问来源于stack exchange,提问作者Nivi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:49:06