Deployment
Docker
Emit a Dockerfile and (optionally) build/push the image.
The Docker target emits a Dockerfile plus the Node bundle. With --docker-build and --docker-push, the CLI invokes Docker for you.
Build the scaffold
fh build --target dockerOutput:
.fabricharness/build/docker/
Dockerfile
dist/server.mjs
manifest.json
README.docker.mdBuild the image in one step
fh build --target docker --docker-build --docker-tag myorg/agents:0.1.0Add --docker-push to push immediately:
fh build --target docker --docker-build --docker-push --docker-tag myorg/agents:0.1.0SBOM and provenance
The CLI integrates with Syft and cosign:
fh build --target docker \
--docker-build --docker-tag myorg/agents:0.1.0 \
--image-sbom --image-sbom-required \
--provenance --sign-provenance --signing-key env://COSIGN_PRIVATE_KEYVerify later with:
fh verify-attestation .fabricharness/build/docker
fh verify-provenance .fabricharness/build/dockerRunning the image
docker run --rm -p 8080:8080 \
-e PORT=8080 \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
myorg/agents:0.1.0Sandbox notes
The Docker target (the host container) and the Docker sandbox (per-session isolation inside that host) are different things:
- Target Docker = where the Fabric server runs.
- Sandbox Docker = a separate Docker container started per session for tool execution. Requires Docker socket access from the host.
For most production deployments, use a non-Docker sandbox (e.g. Cloudflare Sandbox at the edge, or Foundry Hosted Agents on Azure) and reserve Docker for the host.