运行环境
v4.10.8
部署版本
社区版
异常情况
问题描述
使用 Docker Compose 部署 LangBot(启用 box profile),如果在宿主机的 /root 目录下运行 docker compose,沙箱(Box)功能无法启动,MCP 等依赖沙箱的能力报错:BoxValidationError: host_path /root/LangBot/docker/data/box/default/tenants/... is blocked for security
根因
- compose 默认值会把沙箱根目录解析到 /root 下。
docker-compose.yaml 中:
volumes:
- ${LANGBOT_BOX_ROOT:-${PWD}/data/box}:${LANGBOT_BOX_ROOT:-${PWD}/data/box}
environment:
- BOX__LOCAL__HOST_ROOT=${LANGBOT_BOX_ROOT:-${PWD}/data/box}
- BOX__LOCAL__ALLOWED_MOUNT_ROOTS=${LANGBOT_BOX_ROOT:-${PWD}/data/box}
当在 /root/LangBot/docker 下执行 compose 时,${PWD} 展开为 /root/LangBot/docker,于是 host_root 变成 /root/LangBot/docker/data/box。
langbot-plugin SDK 将 /root 列为禁止挂载路径。box/security.py 中的 _BLOCKED_HOST_PATHS_POSIX 包含 /root、/etc、/proc、/sys、/dev、/boot、/run 等。SDK 在创建沙箱会话时校验 host_path,命中黑名单即拒绝。
改 config.yaml 无效:BOX__LOCAL__HOST_ROOT 环境变量优先级高于 config.yaml 中的 box.local.host_root,即使修改配置文件也会被 compose 环境变量覆盖。
####建议
在文档(Docker 部署部分)中明确说明:
如果启用沙箱功能,docker compose不要安装放在/root目录下.
沙箱根目录(LANGBOT_BOX_ROOT)不能放在 /root、/etc、/proc、/sys、/dev、/boot、/run 等 SDK 禁止挂载的路径下,建议使用 /opt/langbot-box、/data/langbot-box 等目录。
若宿主机部署目录本身在 /root 下(如 /root/LangBot),必须显式设置 LANGBOT_BOX_ROOT 指向 /root 之外的安全目录,并 docker compose up -d --force-recreate 重建容器使其生效。
补充提示:修改沙箱目录后需同时重建 langbot 和 langbot_box 两个容器(--force-recreate),仅 restart 不会重新解析环境变量/volume。
另外建议评估:compose 默认值 ${PWD}/data/box 是否容易让新用户在 /root 下部署时踩坑,可否在文档或启动时给出更明显的提示。
复现步骤
环境
部署方式:Docker Compose(rockchin/langbot:latest,启用 box profile)
宿主机:Linux,部署目录在 /root/LangBot/docker
langbot-plugin SDK:0.5.5
启用的插件
duckduckgo/duckduckgo
ihor-sokoliuk/searxng
链接摘要
运行环境
v4.10.8
部署版本
社区版
异常情况
问题描述
使用 Docker Compose 部署 LangBot(启用
boxprofile),如果在宿主机的/root目录下运行docker compose,沙箱(Box)功能无法启动,MCP 等依赖沙箱的能力报错:BoxValidationError: host_path /root/LangBot/docker/data/box/default/tenants/... is blocked for security根因
docker-compose.yaml中:当在 /root/LangBot/docker 下执行 compose 时,${PWD} 展开为 /root/LangBot/docker,于是 host_root 变成 /root/LangBot/docker/data/box。
langbot-plugin SDK 将 /root 列为禁止挂载路径。box/security.py 中的 _BLOCKED_HOST_PATHS_POSIX 包含 /root、/etc、/proc、/sys、/dev、/boot、/run 等。SDK 在创建沙箱会话时校验 host_path,命中黑名单即拒绝。
改 config.yaml 无效:BOX__LOCAL__HOST_ROOT 环境变量优先级高于 config.yaml 中的 box.local.host_root,即使修改配置文件也会被 compose 环境变量覆盖。
####建议
在文档(Docker 部署部分)中明确说明:
如果启用沙箱功能,docker compose不要安装放在/root目录下.
沙箱根目录(LANGBOT_BOX_ROOT)不能放在 /root、/etc、/proc、/sys、/dev、/boot、/run 等 SDK 禁止挂载的路径下,建议使用 /opt/langbot-box、/data/langbot-box 等目录。
若宿主机部署目录本身在 /root 下(如 /root/LangBot),必须显式设置 LANGBOT_BOX_ROOT 指向 /root 之外的安全目录,并 docker compose up -d --force-recreate 重建容器使其生效。
补充提示:修改沙箱目录后需同时重建 langbot 和 langbot_box 两个容器(--force-recreate),仅 restart 不会重新解析环境变量/volume。
另外建议评估:compose 默认值 ${PWD}/data/box 是否容易让新用户在 /root 下部署时踩坑,可否在文档或启动时给出更明显的提示。
复现步骤
环境
部署方式:Docker Compose(rockchin/langbot:latest,启用 box profile)
宿主机:Linux,部署目录在 /root/LangBot/docker
langbot-plugin SDK:0.5.5
启用的插件
duckduckgo/duckduckgo
ihor-sokoliuk/searxng
链接摘要