# syntax=docker/dockerfile:1 # # Agent-Image für die isolierte, pro-Benutzer-Jobsuche. # # Anders als das App-Image (Dockerfile im Repo-Root) enthält dieses Image KEINE # Anwendung, sondern ausschließlich die Werkzeuge, die der headless Such-Agent # braucht: Claude Code, curl/python3/jq für die Skill-Skripte (Arbeitsagentur-API, # bt.sh) sowie git. Der eigentliche Suchlauf wird vom Host-Runner pro Lauf als # `docker run --rm` gestartet, mit dem jeweiligen Benutzer-Home als Volume — # dadurch landen Memories und Session-Contexte getrennt pro Benutzer. FROM node:20-bookworm-slim ENV DEBIAN_FRONTEND=noninteractive # Werkzeuge für die Skill-Skripte: arbeitsagentur.sh = curl+python3, bt.sh = # curl+jq, plus git/flock/bash/coreutils für die Skripte selbst. RUN apt-get update \ && apt-get install -y --no-install-recommends \ ca-certificates curl git python3 jq util-linux bash coreutils \ && rm -rf /var/lib/apt/lists/* # Claude Code auf einem systemweiten Pfad, damit es unabhängig vom zur Laufzeit # gemounteten HOME gefunden wird. Version an den Host-CLI (2.1.209) angeglichen; # DISABLE_AUTOUPDATER verhindert, dass jeder Benutzer sein eigenes Update zieht. RUN npm install -g @anthropic-ai/claude-code@2.1.209 ENV DISABLE_AUTOUPDATER=1 # Nicht-Root-Benutzer, als der der Such-Agent läuft. Das node:20-Image bringt # bereits uid/gid 1000 (»node«) mit — wir verwenden es unverändert, damit der # Container dieselbe uid hat wie das vom Host-Runner gechownte pro-Benutzer-Home. # COPY/Zielordner müssen für uid 1000 schreibbar sein. # Geteilte Skills (Shared-Code, lesbar für alle); der Entrypoint verlinkt sie # pro Benutzer nach ~/.claude/skills. COPY skills /opt/skills COPY entrypoint.sh /entrypoint.sh RUN chmod +x /entrypoint.sh # Schreibbarer Arbeitsordner (cwd während des Suchlaufs); Projekt-Key von Claude # Code wird -work, also liegen Memory/Contexte unter ~/.claude/projects/-work. # /home/agent wird im Image angelegt (uid 1000), damit der Entrypoint auch ohne # gemountetes Volume (z. B. `docker run … claude --version`) läuft; im echten # Lauf legt der Host-Runner das pro-Benutzer-Volume genau dortüber. RUN mkdir -p /work /home/agent && chown -R 1000:1000 /work /home/agent ENV HOME=/home/agent WORKDIR /work USER 1000:1000 ENTRYPOINT ["/entrypoint.sh"] CMD ["claude", "--version"]