Files
9router/DOCKER.md
nghionpoint 5d3780cfd2 Update Docker build process and documentation
- Replaced `bun run build:bun` with `npm run build` in Dockerfile for consistency.
- Enhanced `DOCKER.md` to include `DATA_DIR` environment variable usage for database persistence.
- Clarified paths for container and host data storage.
2026-04-10 10:14:34 +07:00

1.5 KiB

Docker

This project ships with a Dockerfile for building and running 9Router in a container.

Build image

docker build -t 9router .

Start container

docker run --rm \
  -p 20128:20128 \
  -v "$HOME/.9router:/app/data" \
  -e DATA_DIR=/app/data \
  --name 9router \
  9router

The app listens on port 20128 in the container.

What the volume does

-v "$HOME/.9router:/app/data" \
-e DATA_DIR=/app/data

9router stores its database at path.join(DATA_DIR, "db.json"). Without DATA_DIR, the app falls back to the current user's home directory (for example ~/.9router/db.json on macOS/Linux). In the container, set DATA_DIR=/app/data so the bind mount is actually used.

With the example above, the database file is:

/app/data/db.json

and it is persisted on the host at:

$HOME/.9router/db.json

Stop container

docker stop 9router

Run in background

docker run -d \
  -p 20128:20128 \
  -v "$HOME/.9router:/app/data" \
  -e DATA_DIR=/app/data \
  --name 9router \
  9router

View logs

docker logs -f 9router

Optional environment variables

You can override runtime env vars with -e.

Example:

docker run --rm \
  -p 20128:20128 \
  -v "$HOME/.9router:/app/data" \
  -e DATA_DIR=/app/data \
  -e PORT=20128 \
  -e HOSTNAME=0.0.0.0 \
  -e DEBUG=true \
  --name 9router \
  9router

Rebuild after code changes

docker build -t 9router .

Then restart the container.