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

WSL中Snap安装Docker后运行Bazel的container_run_and_commit出现DBus错误

错误根因

该错误触发原因是Snap版本的Docker默认依赖systemd的DBus服务创建临时运行scope,而WSL环境默认未配置完整的systemd/DBus会话,Bazel调用Docker时进程环境不匹配就会抛出对应报错。

修复方案

方案1(推荐,彻底解决兼容问题):替换Snap版Docker为官方标准安装包

  • 先卸载当前Snap安装的Docker:
sudo snap remove docker --purge
  • 安装Docker官方适配WSL的标准版本:
# 安装基础依赖
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release

# 添加Docker官方GPG密钥
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# 导入Docker软件源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker核心组件
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • 将当前用户加入docker用户组,避免每次调用Docker需要sudo权限:
sudo usermod -aG docker $USER
newgrp docker

方案2(临时修复,无需重装Docker)

运行Bazel命令时手动清空DBus会话环境变量,跳过Docker的scope创建检查:

DBUS_SESSION_BUS_ADDRESS="" bazel <你的Bazel执行命令,如build/run对应的目标规则>

如果仍然报错,可额外添加Bazel沙箱权限参数,允许沙箱直接访问Docker套接字:

DBUS_SESSION_BUS_ADDRESS="" bazel <执行命令> --sandbox_writable_path=/run/docker.sock

额外排查项

  • 确认当前使用WSL2而非WSL1,WSL1对Docker的运行支持存在原生缺陷
  • 如果你已经开启WSL2的systemd支持,可先检查Docker服务状态是否正常:
sudo systemctl status docker
# 若服务未启动,执行以下命令开启并设置开机自启
sudo systemctl enable --now docker

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 18:54:03