E2B沙箱服务部署
建议使用openEuler 24.03 LTS SP3 for Arm原生的内核,若更新内核会在E2B构建模板阶段可能会出现未知问题。
E2B服务部署
可参考以下步骤,通过提供的脚本完成自动化部署;若需定制化调整,可基于脚本内容进行修改。
- 安装e2b-infra软件包。
- 获取软件包。软件链接如下,下载arm64版本。
https://eulermaker.openeuler.openatom.cn/package/download?osProject=2403sp3&packageName=e2b-infra
- 卸载旧的软件包。
rpm -e e2b-infra
- 安装e2b-infra软件包,安装目录为“/opt/e2b-infra”。
rpm -ivh e2b-infra-2026.09-3.oe2403sp3.aarch64.rpm
- 获取软件包。软件链接如下,下载arm64版本。
- 修改“/opt/e2b-infra/dep/.env”配置文件。
- 打开配置文件。
vi /opt/e2b-infra/dep/.env
- 按“i”进入编辑模式,修改如下配置。
# 在.env文件第一行 export SERVER_IP=本机地址 # 当前集群server节点的IP地址,空格分隔(server节点为nomad的server端运行所在的节点) export DEPLOY_MODE=k8s # 当前支持k8s和nomad两种部署方式
.env文件中其余关键配置默认如下,可按需修改。
export HARBOR_HTTP_PORT=2900 # harbor仓库地址,默认值为 REGISTRY_URL=$SERVER_IP:2900/e2b-orchestration,即harbor默认端口为2900 export HARBOR_HTTP_PORT=30443 export REGISTRY_PROJECT=e2b-orchestration #harbor默认项目 export POSTGRES_CONNECTION_STRING="postgresql://{username}:{password}@{ip}:{port}/{database_name}?sslmode=disable" # postgres数据库地址,默认值为postgresql://postgres:local@$SERVER_IP:5432/mydatabase?sslmode=disable - 按“Esc”键退出编辑模式,输入:wq!,按“Enter”键保存并退出文件。
- 打开配置文件。
- 将nerdctl兼容为docker命令。
cp -f /usr/bin/nerdctl /usr/bin/docker
- 安装容器镜像构建引擎BuildKit。
- 根据系统架构,设置BuildKit下载架构。
case "$(uname -m)" in x86_64) ARCH=amd64 ;; aarch64*) ARCH=arm64 ;; *) echo "$(uname -m), isn't supported" exit 1 ;; esac
- 下载BuildKit安装包。
wget https://openfuyao.obs.cn-north-4.myhuaweicloud.com/moby/buildkit/releases/download/v0.27.1/buildkit-v0.27.1.linux-${ARCH}.tar.gz - 解压并安装BuildKit。
tar -xvzf buildkit-v0.27.1.linux-${ARCH}.tar.gz -C /usr/local/bin/ mv /usr/local/bin/bin/buildctl /usr/local/bin/bin/buildkitd /usr/local/bin/ - 创建BuildKit配置文件“/etc/buildkit/buildkitd.toml”。
mkdir -p /etc/buildkit cat > /etc/buildkit/buildkitd.toml <<'EOF' [worker.oci] enabled = false [worker.containerd] namespace = "default" address = "/run/containerd/containerd.sock" EOF
- 配置BuildKit systemd服务。
cat > /usr/lib/systemd/system/buildkit.service << 'EOF' [Unit] Description=BuildKit Requires=buildkit.socket After=buildkit.socket Documentation=https://github.com/moby/buildkit [Service] Type=notify ExecStart=/usr/local/bin/buildkitd --addr fd:// [Install] WantedBy=multi-user.target EOF
- 配置BuildKit Socket。
cat > /usr/lib/systemd/system/buildkit.socket << 'EOF' [Unit] Description=BuildKit Documentation=https://github.com/moby/buildkit [Socket] ListenStream=%t/buildkit/buildkitd.sock SocketMode=0660 [Install] WantedBy=sockets.target EOF
- 启动BuildKit服务。
systemctl enable --now buildkit.service buildkit.socket
- 根据系统架构,设置BuildKit下载架构。
- 安装并启动。
- 进入“/opt/e2b-infra”目录。
cd /opt/e2b-infra
- 下载依赖组件。如遇网络问题可手动下载相关依赖并上传至“/opt/e2b-infra/dep”目录。
bash build.sh --download
arm64所需依赖包如下所示(详见/opt/e2b-infra/build.sh脚本download_packages函数)。

- 安装。安装过程需要拉取Docker镜像,如遇网络问题可使用Docker代理进行手动拉取。在执行start启动服务之前需将Docker代理关掉。
bash build.sh --install
Docker镜像需要如下所示(详见build.sh脚本pull_docker_images函数)。

- 启动服务。
bash build.sh --start
如启动失败,则先执行--stop并且--uninstall,再尝试重新--start启动服务。
bash build.sh --stop bash build.sh --uninstall
表1 build.sh默认配置参数说明 变量名
值
含义
PG_PORT
5432
postgres容器服务端口。
HARBOR_HTTP_PORT
2900
harbor服务端口,后续可通过server_ip:2900访问harbor管理系统。
HARBOR_USER
admin
harbor管理系统账户。
HARBOR_PASSWORD
Harbor12345
harbor管理系统账户admin的默认密码。
- 进入“/opt/e2b-infra”目录。
- 验证E2B,使用OpenClaw调用沙箱执行命令。
- 导入Ubuntu镜像。
cd /opt/e2b-infra/dep docker load < ubuntu-22.04-custom.tar.gz
- 用户可以使用自定义镜像创建模板,默认使用Ubuntu镜像,执行以下命令,将“ip”替换为服务器IP地址,将Ubuntu镜像推送到harbor镜像仓。
docker tag ubuntu:22.04-custom {ip}:30443/e2b-orchestration/ubuntu:22.04-custom docker push {ip}:30443/e2b-orchestration/ubuntu:22.04-custom - 创建沙箱模板,修改“/opt/e2b-infra/template-ubuntu.py”文件里的SERVER_IP为本机IP地址。
cd /opt/e2b-infra python3 template-ubuntu.py
“/opt/e2b-infra/template-ubuntu.py”中Template.build的alias参数为模板别名,cpu_count为沙箱vCPU数,memory_mb为沙箱内存大小(单位MB)。

结果如下,打印模板构建完成。

- 创建沙箱,验证服务是否部署成功,修改“/opt/e2b-infra/create_sandbox.py”里“ip”为本机IP地址。
cd /opt/e2b-infra python3 create_sandbox.py
预期结果为输出沙箱ID。

- 在OpenClaw容器内部署E2B插件。
bash build.sh --deploy-plugin openclaw openclaw app=openclaw-deployment default
bash build.sh --deploy-plugin openclaw <模板名称> <选择器> <k8s命名空间>
参数说明:
- openclaw:固定为“openclaw”。
- <模板名称>:E2B创建的模板名称,默认"openclaw"。
- <选择器>:OpenClaw容器的label-selector,可通过kubectl describe pod -n default {openclaw容器名} | grep app=获取。
- <k8s命名空间>:OpenClaw容器的命名空间,默认default。
执行结果如下。

- 验证OpenClaw调用e2b沙箱执行Shell命令的能力。
kubectl exec -it <pod名称> -- bash openclaw tui
执行openclaw tui命令后,向OpenClaw发送对话消息“使用exec-local执行uname -a”,执行结果如下。

- (可选)若容器重启需重新配置网络。
kubectl exec -it <pod名称> -- bash
配置网络。cat > /etc/dnsmasq.conf << 'EOF' no-resolv address=/.e2b.app/127.0.0.1 listen-address=127.0.0.1 bind-interfaces EOF pkill dnsmasq 2>/dev/null || true yum install -y dnsmasq socat dnsmasq --conf-file=/etc/dnsmasq.conf #E2B_ENVD_PORT默认3002 nohup socat TCP-LISTEN:80,fork,reuseaddr TCP:${E2B_HOST_IP}:${E2B_ENVD_PORT} >/dev/null 2>&1 & nohup socat TCP-LISTEN:443,fork,reuseaddr TCP:${E2B_HOST_IP}:${E2B_ENVD_PORT} >/dev/null 2>&1 &
- 导入Ubuntu镜像。
父主题: 基于openFuyao的快捷部署