Add Claude Desktop container with per-start sign-in
Dockerfile installs Claude Desktop from Anthropic's apt repo (key fingerprint verified) and runs it as a non-root user matching the host UID/GID. run.sh forwards the host X display with a scoped xauth cookie and checks that a window can be drawn before starting the app. No keyring and no config volume: Electron uses --password-store=basic, the container runs with --rm, so the user logs in on every start. Chromium's sandbox can't create namespaces under Docker's default seccomp profile, so the app runs with --no-sandbox; the container's own seccomp and namespaces remain the boundary to the host. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -54,7 +54,8 @@ The repo is at an early stage (no code yet). The layout below is the **intended*
|
||||
|
||||
- **Pin versions.** Ghidra version, GhidraMCP release, JDK version, Claude Desktop build and RE MCP commit go in `.env` / build args, not `latest`. The GhidraMCP release must match the Ghidra version it was built for.
|
||||
- **Run as non-root** inside containers. Map the host UID/GID (via `.env`) so files in `workspace/` stay owned by the user.
|
||||
- **Persist state in named volumes or `workspace/`**: Claude Desktop config/login (`~/.config/Claude`), Ghidra user settings and projects. Rebuilding an image must not lose sign-in or analysis.
|
||||
- **Persist state in named volumes or `workspace/`**: Ghidra user settings and projects. Rebuilding an image must not lose analysis.
|
||||
- **Claude Desktop sign-in is not persisted.** No keyring is installed and `~/.config/Claude` is not mounted, so the user logs in on every start. Don't add a keyring or config volume back without being asked.
|
||||
- **No secrets in the repo.** Credentials, session data and `workspace/` contents are git-ignored. Ship `.env.example`, never `.env`.
|
||||
- **Untrusted binaries.** Samples under analysis may be malicious. Never execute them on the host or in the Claude Desktop container. Containers that might run samples (dynamic analysis) should have no host mounts beyond `workspace/` and should allow network isolation (`network_mode: none` or an internal-only network).
|
||||
- **Linux only.** Target recent Docker Engine + Compose v2 (`docker compose`, not `docker-compose`). Make the setup work under both Docker and rootless Podman where practical. On SELinux hosts such as Fedora, bind mounts need `:z`/`:Z`.
|
||||
|
||||
Reference in New Issue
Block a user