From e18d2bfb2c6133580da3d8dd07ebc1ff0c9c66b8 Mon Sep 17 00:00:00 2001 From: xfy Date: Tue, 14 Jul 2026 16:42:04 +0800 Subject: [PATCH] =?UTF-8?q?fix(docker):=20=E7=94=A8=20tmpfs=20mode=3D1777?= =?UTF-8?q?=20=E6=9B=BF=E6=8D=A2=20uid/gid=20=E9=80=89=E9=A1=B9=E4=BB=A5?= =?UTF-8?q?=E5=85=BC=E5=AE=B9=20Podman?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/infra/docker.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/infra/docker.rs b/src/infra/docker.rs index 12dec51..bc2c099 100644 --- a/src/infra/docker.rs +++ b/src/infra/docker.rs @@ -20,7 +20,11 @@ pub static DOCKER_CLIENT: LazyLock = LazyLock::new(|| { pub fn build_host_config(limits: &ResourceLimits) -> HostConfig { let mut tmpfs = HashMap::new(); - tmpfs.insert("/code".to_string(), "size=16m,uid=1000,gid=1000".to_string()); + // /code 用 mode=1777(sticky + all-rwx)让容器内 1000:1000 用户可写。 + // 不用 `uid=1000,gid=1000`:那是 Docker 的 tmpfs 扩展选项,Podman 报 + // `unknown mount option "uid=1000"`。mode=1777 是 POSIX 标准 tmpfs 选项, + // Docker 与 Podman 都支持,语义等价(任意 UID 可写 /code)。 + tmpfs.insert("/code".to_string(), "size=16m,mode=1777".to_string()); // /tmp 必须 exec:编译型语言(go/rust)把编译产物落在 /tmp 后再 exec, // Docker tmpfs 默认 noexec 会让执行二进制时报 EACCES(permission denied)。 // 解释型语言(python/node)执行根文件系统的解释器,不受影响。