From 5c3a8650286b2d3b1ddce8db196e7ffe60f37181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E7=84=B6?= Date: Fri, 20 Mar 2026 22:21:30 +0800 Subject: [PATCH 1/2] feat(execd): add EXECD_CLONE3_COMPAT seccomp-based clone3 fallback --- components/execd/README.md | 39 ++++++++ components/execd/README_zh.md | 41 ++++++++ components/execd/go.mod | 3 +- components/execd/go.sum | 2 + components/execd/main.go | 3 + components/execd/pkg/clone3compat/compat.go | 27 ++++++ .../execd/pkg/clone3compat/compat_linux.go | 97 +++++++++++++++++++ .../execd/pkg/clone3compat/compat_stub.go | 20 ++++ 8 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 components/execd/pkg/clone3compat/compat.go create mode 100644 components/execd/pkg/clone3compat/compat_linux.go create mode 100644 components/execd/pkg/clone3compat/compat_stub.go diff --git a/components/execd/README.md b/components/execd/README.md index dce1fd739..6cc3d43ca 100644 --- a/components/execd/README.md +++ b/components/execd/README.md @@ -11,6 +11,7 @@ English | [中文](README_zh.md) - [Architecture](#architecture) - [Getting Started](#getting-started) - [Configuration](#configuration) + - [Linux `clone3` compatibility inside sandboxes](#linux-clone3-compatibility-inside-sandboxes) - [API Reference](#api-reference) - [Supported Languages](#supported-languages) - [Development](#development) @@ -82,6 +83,7 @@ English | [中文](README_zh.md) | `pkg/jupyter/execute/` | Execution result types and stream parsers | | `pkg/jupyter/session/` | Session management and lifecycle | | `pkg/util/` | Utilities (safe goroutine helpers, glob helpers) | +| `pkg/clone3compat/` | Optional seccomp shim for `clone3` → `ENOSYS` on Linux | | `tests/` | Test scripts and tools | ## Getting Started @@ -169,6 +171,43 @@ export JUPYTER_TOKEN=your-token Environment variables override defaults but are superseded by explicit CLI flags. +| Variable | Description | +|----------|-------------| +| `EXECD_CLONE3_COMPAT` | Linux only. See [below](#linux-clone3-compatibility-inside-sandboxes). | + +### Linux `clone3` compatibility inside sandboxes + +Some sandbox images ship **glibc ≥ 2.34**, which prefers the `clone3(2)` syscall. On **older container engines** (for example Docker **before 20.10.10** and matching containerd CRI versions), or wherever `clone3` is not handled correctly, **process creation can fail**. That affects anything that forks or execs: **Go `os/exec`** inside execd, shell commands, package managers (`apt`, `dnf`), and language runtimes that start subprocesses. + +Typical symptoms are errors mentioning **`clone3`**, **`Function not implemented`**, or **`Operation not permitted`** when running commands or code **inside the sandbox**—not necessarily when starting the OpenSandbox server on the host. + +#### Enabling the built-in workaround + +execd can install a **seccomp** rule so `clone3` returns **`ENOSYS`**, forcing libc and the Go runtime to fall back to `clone(2)`—the same idea as [AkihiroSuda/clone3-workaround](https://github.com/AkihiroSuda/clone3-workaround). Implementation: [`pkg/clone3compat/`](pkg/clone3compat/). + +Set the variable **in the sandbox container environment** (where execd is PID 1 or otherwise started): + +| Value | Behavior | +|-------|----------| +| `1`, `true`, `yes`, `on` | Load the filter at the beginning of `main` (after Go runtime `init`). | +| `reexec` | Load the filter, then `exec` the same binary again so subsequent `init` runs already under seccomp (closest to wrapping with the external workaround binary). | + +Unset, empty, or `0` / `false` / `off` / `no` disables the feature. + +#### SDK + +Set `EXECD_CLONE3_COMPAT` in `Sandbox.create` `env` so execd sees it when the sandbox starts: + +```python +sandbox = await Sandbox.create( + "opensandbox/code-interpreter:v1.0.2", + entrypoint=["/opt/opensandbox/code-interpreter.sh"], + env={"EXECD_CLONE3_COMPAT": "1"}, +) +``` + +The sandbox must allow **seccomp** and **`PR_SET_NO_NEW_PRIVS`** for the filter to load. Upgrading the host container engine/kernel is the long-term fix when possible. + ## API Reference [API Spec](../../specs/execd-api.yaml). diff --git a/components/execd/README_zh.md b/components/execd/README_zh.md index 35c3e4aac..26e012ddf 100644 --- a/components/execd/README_zh.md +++ b/components/execd/README_zh.md @@ -12,6 +12,7 @@ - [架构设计](#架构设计) - [快速开始](#快速开始) - [配置说明](#配置说明) + - [沙箱内的 Linux clone3 兼容](#沙箱内的-linux-clone3-兼容) - [API 参考](#api-参考) - [支持的语言](#支持的语言) - [开发指南](#开发指南) @@ -80,6 +81,7 @@ | `pkg/jupyter/execute/` | 执行结果类型与流解析器 | | `pkg/jupyter/session/` | 会话管理与生命周期 | | `pkg/util/` | 通用工具(安全 goroutine、glob 辅助) | +| `pkg/clone3compat/` | Linux 下可选 seccomp,使 `clone3` 返回 `ENOSYS` | | `tests/` | 测试脚本和工具 | ## 快速开始 @@ -167,6 +169,45 @@ export JUPYTER_TOKEN=your-token 环境变量优先于默认值,但会被显式的 CLI 标志覆盖。 +| 变量 | 说明 | +|------|------| +| `EXECD_CLONE3_COMPAT` | 仅 Linux。详见 [下文](#沙箱内的-linux-clone3-兼容)。 | + +### 沙箱内的 Linux clone3 兼容 + +部分沙箱镜像使用 **glibc ≥ 2.34**,会优先使用 **`clone3(2)`** 系统调用。在**较旧的容器引擎**上(例如 Docker **低于 20.10.10** 及对应 containerd CRI 版本),或运行时对 `clone3` 支持不完整时,**创建子进程可能失败**。 + +受影响场景包括:execd 内部的 **Go `os/exec`**、shell 命令、`apt`/`dnf` 等包管理器,以及会拉子进程的语言运行时。 + +常见报错里会出现 **`clone3`**、**`Function not implemented`** 或 **`Operation not permitted`**,且多发生在**沙箱内**执行命令或代码时,而不一定是宿主机上启动 OpenSandbox 服务时。 + +#### 启用内置规避 + +execd 可通过 **seccomp** 让 `clone3` 返回 **`ENOSYS`**,迫使 libc 与 Go 运行时回退到 **`clone(2)`**,思路与 [AkihiroSuda/clone3-workaround](https://github.com/AkihiroSuda/clone3-workaround) 一致。实现见 [`pkg/clone3compat/`](pkg/clone3compat/)。 + +在**沙箱容器环境变量**中设置(execd 作为容器入口或主进程时): + +| 取值 | 行为 | +|------|------| +| `1`、`true`、`yes`、`on` | 在 `main` 开头加载过滤器(Go `init` 之后)。 | +| `reexec` | 加载过滤器后对同二进制再 `exec` 一次,使后续 `init` 已在 seccomp 下运行(最接近外挂 workaround 二进制的方式)。 | + +未设置、为空,或为 `0` / `false` / `off` / `no` 时关闭。 + +#### SDK + +在 `Sandbox.create` 的 `env` 中设置 `EXECD_CLONE3_COMPAT`,使 execd 在沙箱启动时即可读到: + +```python +sandbox = await Sandbox.create( + "opensandbox/code-interpreter:v1.0.2", + entrypoint=["/opt/opensandbox/code-interpreter.sh"], + env={"EXECD_CLONE3_COMPAT": "1"}, +) +``` + +沙箱需允许加载 seccomp 过滤器(**seccomp**、**`PR_SET_NO_NEW_PRIVS`**)。长期仍建议在宿主机上升级容器引擎/内核,使 `clone3` 全链路可用。 + ## API 参考 [API Spec](../../specs/execd-api.yaml)。 diff --git a/components/execd/go.mod b/components/execd/go.mod index 0b3f39cb5..c19f37a2c 100644 --- a/components/execd/go.mod +++ b/components/execd/go.mod @@ -5,6 +5,7 @@ go 1.24.0 require ( github.com/alibaba/opensandbox/internal v0.0.0 github.com/bmatcuk/doublestar/v4 v4.9.1 + github.com/elastic/go-seccomp-bpf v1.6.0 github.com/gin-gonic/gin v1.10.0 github.com/go-playground/validator/v10 v10.28.0 github.com/go-sql-driver/mysql v1.8.1 @@ -13,6 +14,7 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible github.com/stretchr/testify v1.10.0 go.uber.org/automaxprocs v1.6.0 + golang.org/x/sys v0.38.0 k8s.io/apimachinery v0.34.2 k8s.io/client-go v0.34.2 ) @@ -54,7 +56,6 @@ require ( golang.org/x/arch v0.8.0 // indirect golang.org/x/crypto v0.45.0 // indirect golang.org/x/net v0.47.0 // indirect - golang.org/x/sys v0.38.0 // indirect golang.org/x/text v0.31.0 // indirect google.golang.org/protobuf v1.36.5 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/components/execd/go.sum b/components/execd/go.sum index 0ebe846c5..9cb6871af 100644 --- a/components/execd/go.sum +++ b/components/execd/go.sum @@ -14,6 +14,8 @@ github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ3 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/elastic/go-seccomp-bpf v1.6.0 h1:NYduiYxRJ0ZkIyQVwlSskcqPPSg6ynu5pK0/d7SQATs= +github.com/elastic/go-seccomp-bpf v1.6.0/go.mod h1:5tFsTvH4NtWGfpjsOQD53H8HdVQ+zSZFRUDSGevC0Kc= github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= diff --git a/components/execd/main.go b/components/execd/main.go index e9b1d7641..fc051a166 100644 --- a/components/execd/main.go +++ b/components/execd/main.go @@ -22,6 +22,7 @@ import ( _ "go.uber.org/automaxprocs/maxprocs" + "github.com/alibaba/opensandbox/execd/pkg/clone3compat" "github.com/alibaba/opensandbox/execd/pkg/flag" "github.com/alibaba/opensandbox/execd/pkg/log" _ "github.com/alibaba/opensandbox/execd/pkg/util/safego" @@ -31,6 +32,8 @@ import ( // main initializes and starts the execd server. func main() { + clone3compat.MaybeApply() + version.EchoVersion("OpenSandbox Execd") flag.InitFlags() diff --git a/components/execd/pkg/clone3compat/compat.go b/components/execd/pkg/clone3compat/compat.go new file mode 100644 index 000000000..e46e78337 --- /dev/null +++ b/components/execd/pkg/clone3compat/compat.go @@ -0,0 +1,27 @@ +// Copyright 2026 Alibaba Group Holding Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package clone3compat installs an optional seccomp rule so clone3(2) returns ENOSYS and +// libc / the Go runtime fall back to clone(2), following the same idea as +// https://github.com/AkihiroSuda/clone3-workaround . +// +// Enable on Linux via environment when starting execd: +// +// EXECD_CLONE3_COMPAT=1 — install the filter at process start (after Go runtime init). +// EXECD_CLONE3_COMPAT=reexec — install the filter then re-exec the same binary so all +// package init code runs with the filter already active +// (closest to wrapping with the external clone3-workaround binary). +// +// Disabled when unset or empty, or set to 0, false, off, no. +package clone3compat diff --git a/components/execd/pkg/clone3compat/compat_linux.go b/components/execd/pkg/clone3compat/compat_linux.go new file mode 100644 index 000000000..c3d9792e4 --- /dev/null +++ b/components/execd/pkg/clone3compat/compat_linux.go @@ -0,0 +1,97 @@ +// Copyright 2026 Alibaba Group Holding Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build linux + +package clone3compat + +import ( + "errors" + "fmt" + "os" + "strings" + "syscall" + + seccomp "github.com/elastic/go-seccomp-bpf" + "golang.org/x/sys/unix" +) + +const ( + envCompat = "EXECD_CLONE3_COMPAT" + envApplied = "_EXECD_CLONE3_COMPAT_APPLIED" +) + +// MaybeApply optionally installs a seccomp rule so clone3 returns ENOSYS, matching the +// behavior of https://github.com/AkihiroSuda/clone3-workaround . +func MaybeApply() { + mode := strings.ToLower(strings.TrimSpace(os.Getenv(envCompat))) + switch mode { + case "", "0", "false", "off", "no": + return + case "1", "true", "yes", "on": + if err := loadClone3EnosysFilter(); err != nil { + _, _ = fmt.Fprintf(os.Stderr, "execd: %v\n", err) + os.Exit(1) + } + case "reexec": + if os.Getenv(envApplied) == "1" { + return + } + if err := loadClone3EnosysFilter(); err != nil { + _, _ = fmt.Fprintf(os.Stderr, "execd: %v\n", err) + os.Exit(1) + } + if err := os.Setenv(envApplied, "1"); err != nil { + _, _ = fmt.Fprintf(os.Stderr, "execd: clone3 compat: set %s: %v\n", envApplied, err) + os.Exit(1) + } + exe, err := os.Readlink("/proc/self/exe") + if err != nil { + _, _ = fmt.Fprintf(os.Stderr, "execd: clone3 compat: readlink /proc/self/exe: %v\n", err) + os.Exit(1) + } + exe = strings.TrimSuffix(exe, " (deleted)") + if err := unix.Exec(exe, os.Args, os.Environ()); err != nil { + _, _ = fmt.Fprintf(os.Stderr, "execd: clone3 compat: exec: %v\n", err) + os.Exit(1) + } + default: + _, _ = fmt.Fprintf(os.Stderr, "execd: invalid %s=%q (use 1, true, or reexec)\n", envCompat, os.Getenv(envCompat)) + os.Exit(1) + } +} + +func loadClone3EnosysFilter() error { + if !seccomp.Supported() { + return errors.New("clone3 compat: seccomp is not available on this kernel") + } + f := seccomp.Filter{ + NoNewPrivs: true, + Flag: seccomp.FilterFlagTSync, + Policy: seccomp.Policy{ + DefaultAction: seccomp.ActionAllow, + Syscalls: []seccomp.SyscallGroup{ + { + Names: []string{"clone3"}, + // Not plain ActionErrno: assembler defaults errno to EPERM. + Action: seccomp.ActionErrno | seccomp.Action(syscall.ENOSYS), + }, + }, + }, + } + if err := seccomp.LoadFilter(f); err != nil { + return fmt.Errorf("clone3 compat: %w", err) + } + return nil +} diff --git a/components/execd/pkg/clone3compat/compat_stub.go b/components/execd/pkg/clone3compat/compat_stub.go new file mode 100644 index 000000000..2f13a3c88 --- /dev/null +++ b/components/execd/pkg/clone3compat/compat_stub.go @@ -0,0 +1,20 @@ +// Copyright 2026 Alibaba Group Holding Ltd. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !linux + +package clone3compat + +// MaybeApply is a no-op on non-Linux platforms. +func MaybeApply() {} From cc893fdfed7a7c497ec7d461d828307071e3246f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 20 Mar 2026 14:51:15 +0000 Subject: [PATCH 2/2] chore: bump execd to v1.0.8.clone3.fix1 --- examples/agent-sandbox/README.md | 2 +- examples/code-interpreter/README.md | 2 +- kubernetes/charts/opensandbox-server/values.yaml | 2 +- kubernetes/config/samples/sandbox_v1alpha1_pool.yaml | 2 +- oseps/0004-secure-container-runtime.md | 6 +++--- oseps/0007-fast-sandbox-runtime-support.md | 2 +- server/DEVELOPMENT.md | 2 +- server/README.md | 8 ++++---- server/README_zh.md | 8 ++++---- server/docker-compose.example.yaml | 4 ++-- server/example.config.k8s.toml | 2 +- server/example.config.k8s.zh.toml | 2 +- server/example.config.toml | 2 +- server/example.config.zh.toml | 2 +- 14 files changed, 23 insertions(+), 23 deletions(-) diff --git a/examples/agent-sandbox/README.md b/examples/agent-sandbox/README.md index 980df2cc6..23bd79fe9 100644 --- a/examples/agent-sandbox/README.md +++ b/examples/agent-sandbox/README.md @@ -23,7 +23,7 @@ opensandbox-server init-config ~/.sandbox.toml --example docker ```toml [runtime] type = "kubernetes" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [kubernetes] namespace = "default" diff --git a/examples/code-interpreter/README.md b/examples/code-interpreter/README.md index 19882e519..5ba700b50 100644 --- a/examples/code-interpreter/README.md +++ b/examples/code-interpreter/README.md @@ -104,7 +104,7 @@ spec: - name: opensandbox-bin mountPath: /opt/opensandbox/bin - name: execd-installer - image: sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7 + image: sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1 command: [ "/bin/sh", "-c" ] args: - | diff --git a/kubernetes/charts/opensandbox-server/values.yaml b/kubernetes/charts/opensandbox-server/values.yaml index 2ca4b3505..b40aade3d 100644 --- a/kubernetes/charts/opensandbox-server/values.yaml +++ b/kubernetes/charts/opensandbox-server/values.yaml @@ -62,7 +62,7 @@ configToml: | [runtime] type = "kubernetes" - execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7" + execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1" [kubernetes] kubeconfig_path = "" diff --git a/kubernetes/config/samples/sandbox_v1alpha1_pool.yaml b/kubernetes/config/samples/sandbox_v1alpha1_pool.yaml index 80973c353..48e5bb858 100644 --- a/kubernetes/config/samples/sandbox_v1alpha1_pool.yaml +++ b/kubernetes/config/samples/sandbox_v1alpha1_pool.yaml @@ -31,7 +31,7 @@ spec: - name: opensandbox-bin mountPath: /opt/opensandbox/bin - name: execd-installer - image: sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7 + image: sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1 command: [ "/bin/sh", "-c" ] args: - | diff --git a/oseps/0004-secure-container-runtime.md b/oseps/0004-secure-container-runtime.md index 3f60456b8..01940371f 100644 --- a/oseps/0004-secure-container-runtime.md +++ b/oseps/0004-secure-container-runtime.md @@ -180,7 +180,7 @@ Extension to `~/.sandbox.toml`. A single `[secure_runtime]` section configures t ```toml [runtime] type = "docker" # or "kubernetes" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" # Secure container runtime configuration. # When enabled, ALL sandboxes on this server use the specified runtime. @@ -210,7 +210,7 @@ Example 1 — gVisor on Docker: # ~/.sandbox.toml [runtime] type = "docker" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [secure_runtime] type = "gvisor" @@ -224,7 +224,7 @@ Example 2 — Kata Containers (QEMU) on Kubernetes: # ~/.sandbox.toml [runtime] type = "kubernetes" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [secure_runtime] type = "kata" diff --git a/oseps/0007-fast-sandbox-runtime-support.md b/oseps/0007-fast-sandbox-runtime-support.md index 6d808a00a..10fc30d92 100644 --- a/oseps/0007-fast-sandbox-runtime-support.md +++ b/oseps/0007-fast-sandbox-runtime-support.md @@ -611,7 +611,7 @@ api_key = "your-secret-key" [runtime] type = "kubernetes" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [kubernetes] namespace = "default" diff --git a/server/DEVELOPMENT.md b/server/DEVELOPMENT.md index 88f9435ec..5d8c72952 100644 --- a/server/DEVELOPMENT.md +++ b/server/DEVELOPMENT.md @@ -59,7 +59,7 @@ This guide provides comprehensive information for developers working on OpenSand [runtime] type = "docker" - execd_image = "opensandbox/execd:v1.0.7" + execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [docker] network_mode = "host" diff --git a/server/README.md b/server/README.md index 95ee18b20..b0d4d780d 100644 --- a/server/README.md +++ b/server/README.md @@ -95,7 +95,7 @@ Before you start the server, edit the configuration file to suit your environmen [runtime] type = "docker" - execd_image = "opensandbox/execd:v1.0.7" + execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [docker] network_mode = "host" # Containers share host network; only one sandbox instance at a time @@ -112,7 +112,7 @@ Before you start the server, edit the configuration file to suit your environmen [runtime] type = "docker" - execd_image = "opensandbox/execd:v1.0.7" + execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [docker] network_mode = "bridge" # Isolated container networking @@ -242,7 +242,7 @@ EOF ```toml [runtime] type = "kubernetes" - execd_image = "opensandbox/execd:v1.0.7" + execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [kubernetes] kubeconfig_path = "~/.kube/config" @@ -299,7 +299,7 @@ The **`[egress]`** block configures the **egress sidecar** image and enforcement ```toml [runtime] type = "docker" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [egress] image = "opensandbox/egress:v1.0.3" diff --git a/server/README_zh.md b/server/README_zh.md index 102e1c67b..44a2f57de 100644 --- a/server/README_zh.md +++ b/server/README_zh.md @@ -92,7 +92,7 @@ opensandbox-server init-config ~/.sandbox.toml --example k8s-zh [runtime] type = "docker" - execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7" + execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1" [docker] network_mode = "host" # 容器共享宿主机网络,只能创建一个sandbox实例 @@ -108,7 +108,7 @@ opensandbox-server init-config ~/.sandbox.toml --example k8s-zh [runtime] type = "docker" - execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7" + execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1" [docker] network_mode = "bridge" # 容器隔离网络 @@ -218,7 +218,7 @@ mode = "direct" # Docker 运行时仅支持 direct(直连,无 L7 网关) ```toml [runtime] type = "kubernetes" - execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7" + execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1" [kubernetes] kubeconfig_path = "~/.kube/config" @@ -275,7 +275,7 @@ mode = "direct" # Docker 运行时仅支持 direct(直连,无 L7 网关) ```toml [runtime] type = "docker" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [egress] image = "opensandbox/egress:v1.0.3" diff --git a/server/docker-compose.example.yaml b/server/docker-compose.example.yaml index 497276563..c60890924 100644 --- a/server/docker-compose.example.yaml +++ b/server/docker-compose.example.yaml @@ -8,8 +8,8 @@ configs: [runtime] type = "docker" - # execd_image = "opensandbox/execd:v1.0.7" - execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7" + # execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" + execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1" [egress] image = "opensandbox/egress:v1.0.3" diff --git a/server/example.config.k8s.toml b/server/example.config.k8s.toml index f0a049085..1e31d6324 100644 --- a/server/example.config.k8s.toml +++ b/server/example.config.k8s.toml @@ -30,7 +30,7 @@ log_level = "INFO" [runtime] type = "kubernetes" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [storage] # Volume and storage configuration diff --git a/server/example.config.k8s.zh.toml b/server/example.config.k8s.zh.toml index a61d752c1..d55755b13 100644 --- a/server/example.config.k8s.zh.toml +++ b/server/example.config.k8s.zh.toml @@ -30,7 +30,7 @@ log_level = "INFO" [runtime] type = "kubernetes" -execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7" +execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1" [storage] # 卷存储配置 diff --git a/server/example.config.toml b/server/example.config.toml index 0599a4d5d..6efaa5c44 100644 --- a/server/example.config.toml +++ b/server/example.config.toml @@ -31,7 +31,7 @@ max_sandbox_timeout_seconds = 86400 # Runtime selection (docker | kubernetes) # ----------------------------------------------------------------- type = "docker" -execd_image = "opensandbox/execd:v1.0.7" +execd_image = "opensandbox/execd:v1.0.8.clone3.fix1" [egress] # Egress configuration diff --git a/server/example.config.zh.toml b/server/example.config.zh.toml index 8ba43df89..006da20d0 100644 --- a/server/example.config.zh.toml +++ b/server/example.config.zh.toml @@ -28,7 +28,7 @@ log_level = "INFO" # Runtime selection (docker | kubernetes) # ----------------------------------------------------------------- type = "docker" -execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.7" +execd_image = "sandbox-registry.cn-zhangjiakou.cr.aliyuncs.com/opensandbox/execd:v1.0.8.clone3.fix1" [egress] # Egress configuration