---
title: E2B沙箱服务部署（可选）
description: "若需要OpenClaw和工具本体分开部署，参考此章节进行操作。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengaiagent/bestpractice/aiagent-0197.html
sourcePath: /source/zh/kunpengaiagent/bestpractice/aiagent-0197.html
indexId: 48a1adef306f158f462d48397e31741ea29e00f26d5e0ad3cad3977b16f4d66256
---
# E2B沙箱服务部署（可选）

若需要OpenClaw和工具本体分开部署，参考此章节进行操作。

建议使用openEuler 24.03 LTS SP3 for Arm原生的内核，若更新内核会在E2B构建模板阶段可能会出现未知问题。


#### E2B服务部署

可参考以下步骤，通过提供的脚本完成自动化部署；若需定制化调整，可基于脚本内容进行修改。

1. 安装e2b-infra软件包。

  a. 获取软件包。软件链接如下，下载arm64版本。

```
https://eulermaker.openeuler.openatom.cn/package/download?osProject=2403sp3&packageName=e2b-infra
```


  b. 卸载旧的软件包。

```
rpm -e e2b-infra
```


  c. 安装e2b-infra软件包，安装目录为“/opt/e2b-infra”。

```
rpm -ivh e2b-infra-2026.09-3.oe2403sp3.aarch64.rpm
```


2. 修改“/opt/e2b-infra/dep/.env”配置文件。

  a. 打开配置文件。

```
vi /opt/e2b-infra/dep/.env
```


  b. 按“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_HTTPS_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
```


  c. 按“Esc”键退出编辑模式，输入:wq!，按“Enter”键保存并退出文件。
3. 将nerdctl兼容为docker命令。

```
cp -f /usr/bin/nerdctl /usr/bin/docker
```


4. 安装容器镜像构建引擎BuildKit。

  a. 根据系统架构，设置BuildKit下载架构。

```
case "$(uname -m)" in
x86_64)
ARCH=amd64
;;
aarch64*)
ARCH=arm64
;;
*)
echo "$(uname -m), isn't supported"
exit 1
;;
esac
```


  b. 下载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
```


  c. 解压并安装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/
```


  d. 创建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
```


  e. 配置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
```


  f. 配置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
```


  g. 启动BuildKit服务。

```
systemctl enable --now buildkit.service  buildkit.socket
```


5. 安装并启动E2B服务。

  a. 进入“/opt/e2b-infra”目录。

```
cd /opt/e2b-infra
```


  b. 下载依赖组件。如遇网络问题可手动下载相关依赖并上传至“/opt/e2b-infra/dep”目录。

```
bash build.sh --download
```


    arm64所需依赖包如下所示（详见/opt/e2b-infra/build.sh脚本download_packages函数）。

  c. 安装。安装过程需要拉取Docker镜像，如遇网络问题可使用Docker代理进行手动拉取。在执行start启动服务之前需将Docker代理关闭。

```
bash build.sh --install
```


    Docker镜像需要如下所示（详见build.sh脚本pull_docker_images函数）。

  d. 启动服务。

```
bash build.sh --start
```


    如启动失败，则先执行--stop并且--uninstall，再尝试重新--start启动服务。

```
bash build.sh --stop
bash build.sh --uninstall
```


**表1 build.sh默认配置参数说明**

| 变量名 | 值 | 含义 |
| --- | --- | --- |
| PG\_PORT | 5432 | postgres容器服务端口。 |
| HARBOR\_HTTPS\_PORT | 30443 | harbor服务端口，后续可通过server\_ip:30443访问harbor管理系统。 |
| HARBOR\_USER | admin | harbor管理系统账户。 |
| HARBOR\_PASSWORD | Harbor12345 | harbor管理系统账户admin的默认密码。 |


6. 验证E2B。使用OpenClaw调用沙箱执行命令，验证部署是否成功。

  a. 导入Ubuntu镜像。

```
cd /opt/e2b-infra/dep
docker load < ubuntu-22.04-custom.tar.gz
```


  b. 用户可以使用自定义镜像创建模板，默认使用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
```


  c. 创建沙箱模板，修改“/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）。

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

  d. 创建沙箱，验证服务是否部署成功，修改“/opt/e2b-infra/create_sandbox.py”里“ip”为本机IP地址。

```
cd /opt/e2b-infra
python3 create_sandbox.py
```


    预期结果为输出沙箱ID。

  e. 在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。

    执行结果如下。

  f. 验证OpenClaw调用E2B沙箱执行Shell命令的能力。

```
kubectl exec -it
<pod名称>
-- bash
openclaw tui
```


    执行openclaw tui命令后，向OpenClaw发送对话消息“使用local-exec执行uname -a”，执行结果如下。

  g. （可选）若容器重启需重新配置网络。
    进入容器。

```
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_EDGE_PORT默认3002
nohup socat TCP-LISTEN:80,fork,reuseaddr TCP:${E2B_HOST_IP}:${E2B_EDGE_PORT} >/dev/null 2>&1 &
nohup socat TCP-LISTEN:443,fork,reuseaddr TCP:${E2B_HOST_IP}:${E2B_EDGE_PORT} >/dev/null 2>&1 &
```
