Choose a Docker shape
| Shape | Use when | Runtime shape |
|---|---|---|
| Single-project Dockerfile | one Redop app in one package | bun run src/index.ts |
| Monorepo production image | workspace-based repo and optimized production image | compiled Bun binary in a minimal runtime image |
Docker fit
| Item | Value |
|---|---|
| Recommended transport | http |
| Required env vars | PORT for the container runtime |
| Build command | docker build -t redop-app . |
| Run command | docker run --rm -p 3000:3000 -e PORT=3000 redop-app |
| Generated files | create-redop-app --deploy fly-io generates a starting Dockerfile |
Example src/index.ts
Use a listener shape like this in either Docker setup:
Single-project Dockerfile
This is the simplest Docker path for a normal Redop project.- your Redop app lives in one project directory
- you do not need a compiled binary
- you want the clearest Docker setup
Monorepo production Dockerfile
Use this when your Redop app lives inside a workspace and you want a slimmer runtime image.Tradeoffs
| Choice | Benefits | Tradeoffs |
|---|---|---|
bun run src/index.ts | simpler and easier to debug | larger runtime image |
bun build --compile | smaller, cleaner runtime image | more build setup and target-specific output |
Listener expectations
No matter which Docker shape you use:- bind to
0.0.0.0 - read
PORT - expose
/mcp - do not assume
/mcp/healthunless you enabledhealth
Local smoke test
Build the image:- the container starts without crashing
- the app listens on
0.0.0.0:3000inside the container /mcpreturns a valid initialize response