Accessible web-based terminal sessions with AI assistance.
3.0K
This document explains how to build and run the Dispatch Docker image (fwdslsh/dispatch:latest). It includes examples for running the container, mounting local directories for persistent storage, handling permissions, and troubleshooting common Docker-related issues.
# Run Dispatch and expose port 3030
docker run -p 3030:3030 -e TERMINAL_KEY=your-secret-password fwdslsh/dispatch:latest
Open your browser at http://localhost:3030 and enter the password you set in TERMINAL_KEY.
docker run -p 3030:3030 \
-e TERMINAL_KEY=your-secret-password \
-e ENABLE_TUNNEL=true \
fwdslsh/dispatch:latest
When ENABLE_TUNNEL=true the container will attempt to create a public URL. A key is still required for access — TERMINAL_KEY provides minimal protection for public mode and must be strong.
To keep user data, dotfiles, and project files across container restarts, mount host directories into the container.
# Create directories (no sudo needed!)
mkdir -p ~/dispatch-home ~/dispatch-projects
# Option 1: Use your current user ID (recommended)
docker run -p 3030:3030 \
-e TERMINAL_KEY=your-secret-password \
--user $(id -u):$(id -g) \
-v ~/dispatch-home:/home/appuser \
-v ~/dispatch-projects:/workspace \
fwdslsh/dispatch:latest
Recommended mount points:
/home/appuser — user home directory inside the container (shell history, dotfiles)/workspace — where you can keep project folders and codeSecurity isolation: The container can only access the specific directories you mount. No sudo required when using --user $(id -u):$(id -g) or building with your user ID.
# Create directories (no sudo needed!)
mkdir -p ~/dispatch-home ~/dispatch-projects
# Run with persistence and tunneling
docker run -p 3030:3030 \
-e TERMINAL_KEY=your-secret-password \
-e ENABLE_TUNNEL=true \
--user $(id -u):$(id -g) \
-v ~/dispatch-home:/home/appuser \
-v ~/dispatch-projects:/workspace \
fwdslsh/dispatch:latest
TERMINAL_KEY (required) — password used to authenticate to the web UIPORT (default 3030) — port inside the containerPTY_MODE (shell|claude) — default session modeENABLE_TUNNEL (true|false) — enable public URL sharingLT_SUBDOMAIN — optional LocalTunnel subdomainSymptom: You can access the UI but cannot create files or save in mounted folders.
Fix:
mkdir -p ~/dispatch-home ~/dispatch-projectsdocker run --user $(id -u):$(id -g) [other options...]
:ro suffix: -v ~/dispatch-home:/home/appuser:roIf port 3030 on the host is already in use, either stop the conflicting service or map to a different host port:
# Map host port 3030 to container 3030
docker run -p 3030:3030 -e TERMINAL_KEY=your-secret-password fwdslsh/dispatch:latest
ENABLE_TUNNEL=true is setLT_SUBDOMAINTERMINAL_KEY is required for all access; use a strong password when enabling public URLsRun locally (no persistence):
docker run -p 3030:3030 -e TERMINAL_KEY=secret fwdslsh/dispatch:latest
Run with persistence and custom host port:
mkdir -p ~/dispatch-home ~/dispatch-projects
docker run -p 3030:3030 -e TERMINAL_KEY=secret --user $(id -u):$(id -g) -v ~/dispatch-home:/home/appuser -v ~/dispatch-projects:/workspace fwdslsh/dispatch:latest
docker/Dockerfile for how the image is built and the flexible runtime user configurationCONTRIBUTING.md for development and build instructionsContent type
Image
Digest
sha256:6e96a1c77…
Size
1.4 GB
Last updated
9 months ago
docker pull fwdslsh/dispatch