From 5f4c89b99082cd00ab59aa3fe8b234e3f138f67f Mon Sep 17 00:00:00 2001 From: Codeman maintainer Date: Sun, 19 Jul 2026 15:14:44 +0200 Subject: [PATCH] fix(docker): auto-assign agent uid (node:22 already occupies uid 1000) node:22-bookworm-slim ships a `node` user at uid 1000, so `useradd -u 1000` failed. Auto-assign the uid and rely on gid-0 + group-writable HOME so any runtime `--user :0` can write $HOME. Verified: image builds; toolchain (node/tmux/claude/codex/gemini/opencode) present; `--user 1000:0` writes /home/agent and `claude --version` runs. Co-Authored-By: Claude Opus 4.8 (1M context) --- docker/agent.Dockerfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/docker/agent.Dockerfile b/docker/agent.Dockerfile index dff176ab..2e3e6d79 100644 --- a/docker/agent.Dockerfile +++ b/docker/agent.Dockerfile @@ -35,14 +35,18 @@ RUN npm install -g \ opencode-ai \ && npm cache clean --force -# `agent` user (uid 1000, gid 0) with an arbitrary-uid-writable HOME. +# `agent` user (gid 0) with an arbitrary-uid-writable HOME. The uid is +# auto-assigned (node:22-slim already occupies uid 1000 with its `node` user); at +# runtime Codeman overrides with `--user :0` on Linux, so the baked uid +# only matters for a hand-run / Docker Desktop container. gid 0 + group-writable +# HOME (OpenShift arbitrary-uid convention) keeps $HOME writable for any uid. ENV HOME=/home/agent -RUN useradd -u 1000 -g 0 -m -d /home/agent -s /bin/bash agent \ +RUN useradd -g 0 -m -d /home/agent -s /bin/bash agent \ && mkdir -p /home/agent/.npm /home/agent/.cache /home/agent/.config /home/agent/.codeman \ && chgrp -R 0 /home/agent \ && chmod -R g=u /home/agent -USER 1000:0 +USER agent WORKDIR /home/agent # Codeman overrides the command with `sleep infinity` at create time; this is the