Run GitMesh Agents in Docker without installing Node or pnpm locally.
docker build -t gitmesh-agents-local . && \
docker run --name gitmesh-agents \
-p 3100:3100 \
-e HOST=0.0.0.0 \
-e GITMESH_HOME=/gitmesh-agents \
-v "$(pwd)/data/docker-gitmesh-agents:/gitmesh-agents" \
gitmesh-agents-localOpen: http://localhost:3100
Data persistence:
- Embedded PostgreSQL data
- uploaded assets
- local secrets key
- local agent workspace data
All persisted under your bind mount (./data/docker-gitmesh-agents in the example above).
docker compose -f docker-compose.quickstart.yml up --buildDefaults:
- host port:
3100 - persistent data dir:
./data/docker-gitmesh-agents
Optional overrides:
GITMESH_PORT=3200 GITMESH_DATA_DIR=./data/pc docker compose -f docker-compose.quickstart.yml up --buildIf you change host port or use a non-local domain, set GITMESH_PUBLIC_URL to the external URL you will use in browser/auth flows.
For authenticated deployments, set one canonical public URL and let GitMesh Agents derive auth/callback defaults:
services:
gitmesh-agents:
environment:
GITMESH_DEPLOYMENT_MODE: authenticated
GITMESH_DEPLOYMENT_EXPOSURE: private
GITMESH_PUBLIC_URL: https://desk.koker.netGITMESH_PUBLIC_URL is used as the primary source for:
- auth public base URL
- Better Auth base URL defaults
- bootstrap invite URL defaults
- hostname allowlist defaults (hostname extracted from URL)
Granular overrides remain available if needed (GITMESH_AUTH_PUBLIC_BASE_URL, BETTER_AUTH_URL, BETTER_AUTH_TRUSTED_ORIGINS, GITMESH_ALLOWED_HOSTNAMES).
Set GITMESH_ALLOWED_HOSTNAMES explicitly only when you need additional hostnames beyond the public URL host (for example Tailscale/LAN aliases or multiple private hostnames).
The image pre-installs:
claude(Anthropic Claude Code CLI)codex(OpenAI Codex CLI)
If you want local adapter runs inside the container, pass API keys when starting the container:
docker run --name gitmesh-agents \
-p 3100:3100 \
-e HOST=0.0.0.0 \
-e GITMESH_HOME=/gitmesh-agents \
-e OPENAI_API_KEY=... \
-e ANTHROPIC_API_KEY=... \
-v "$(pwd)/data/docker-gitmesh-agents:/gitmesh-agents" \
gitmesh-agents-localNotes:
- Without API keys, the app still runs normally.
- Adapter environment checks in GitMesh Agents will surface missing auth/CLI prerequisites.
Use this when you want to mimic a fresh machine that only has Ubuntu + npm and verify:
npx gitmesh-agents onboard --yescompletes- the server binds to
0.0.0.0:3100so host access works - onboard/run banners and startup logs are visible in your terminal
Build + run:
./scripts/docker-onboard-smoke.shOpen: http://localhost:3131 (default smoke host port)
Useful overrides:
HOST_PORT=3200 GITMESHAI_VERSION=latest ./scripts/docker-onboard-smoke.sh
GITMESH_DEPLOYMENT_MODE=authenticated GITMESH_DEPLOYMENT_EXPOSURE=private ./scripts/docker-onboard-smoke.shNotes:
- Persistent data is mounted at
./data/docker-onboard-smokeby default. - Container runtime user id defaults to your local
id -uso the mounted data dir stays writable while avoiding root runtime. - Smoke script defaults to
authenticated/privatemode soHOST=0.0.0.0can be exposed to the host. - Smoke script defaults host port to
3131to avoid conflicts with local GitMesh Agents on3100. - Run the script in the foreground to watch the onboarding flow; stop with
Ctrl+Cafter validation. - The image definition is in
Dockerfile.onboard-smoke.