如何修复Mac OS上Bazel报错「仍尝试连接本地Bazel服务器」的问题
Bazel MacOS端口被防火墙拦截解决方案
根因定位
本次故障是MacOS安全补丁升级后,内置防火墙拦截未签名的Bazel内嵌JDK进程本地端口通信的已知兼容问题,Bazel 4.x版本普遍存在该故障。
可行解决方案
方案1:添加防火墙放行规则(推荐,永久解决)
- 从
bazel --batch info的java-home输出中获取内嵌JDK的java二进制路径,格式如下:
/var/tmp/_bazel_<你的用户名>/install/<你的install哈希值>/embedded_tools/jdk/bin/java
- 打开MacOS系统设置→安全性与隐私→防火墙→防火墙选项
- 点击左下角+号,找到上述路径的java二进制文件添加,设置为允许传入连接
- 执行
bazel shutdown杀掉现有异常Bazel进程,重新执行bazel info验证即可恢复正常
方案2:临时绕过(无防火墙修改权限时使用)
Bazel的--batch参数会禁用常驻服务模式,所有命令单进程执行,不需要端口通信,缺点是每次命令执行都会重新初始化环境,速度比常驻模式慢30%~50%。
可以通过设置别名简化操作:
- 打开终端执行:
echo "alias bazel='bazel --batch'" >> ~/.zshrc # 如果你用bash则替换为~/.bash_profile
- 执行
source ~/.zshrc生效后,直接调用bazel命令即可自动带batch参数
方案3:升级Bazel版本(兼容性最优)
该问题在Bazel 5.3.0及以上版本已经修复,高版本适配了MacOS新的安全规则,不需要额外修改防火墙配置。可以通过brew或者官方安装包升级到最新稳定版即可解决。
验证步骤
操作完成后执行以下命令验证:
- 杀掉现有Bazel进程:
bazel shutdown - 执行
bazel info,如果10秒内返回正常输出则修复成功 - 可选验证端口连通性:
# 获取当前Bazel服务端口 port=$(cat $(bazel info output_base)/server/command_port | cut -d ':' -f2) nc -vz ::1 $port
返回succeeded!则端口通信正常
内容的提问来源于stack exchange,提问作者Gunnar
相关产品推荐
相关产品推荐

