Files
9router/DOCKER.md
T
decolua 7ccf8c5e84 # v0.4.36 (2026-05-13)
## Features
- Add MiniMax TTS provider support (#1043)
- Docker images now published on both GHCR & Docker Hub (decolua/9router) — pull from your preferred registry

## Improvements
- Replace browser confirm dialogs with custom ConfirmModal (#1060)

## Fixes
- Fix Docker `Cannot find module 'next'` error in standalone build
- Restore /app/server.js in Docker standalone build (#1064, #1067)
- Fix CLI TUI menu arrow-key escape sequences leaking (^[[A^[[B)
- Switch macOS/Linux tray to systray2 fork (fixes Kaspersky AV false-positive) (#1080)
- Fix zoom controls contrast in topology view (#1066)
2026-05-13 18:22:31 +07:00

2.1 KiB

Docker

Run 9Router in a container. Published image: decolua/9router — multi-platform linux/amd64 + linux/arm64.


👤 For Users

Quick start

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

App listens on port 20128. Open: http://localhost:20128

Manage container

docker logs -f 9router        # view logs
docker stop 9router           # stop
docker start 9router          # start again
docker rm -f 9router          # remove

Data persistence

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

Without DATA_DIR, the app falls back to ~/.9router/ (macOS/Linux) or %APPDATA%\9router\ (Windows). In the container, DATA_DIR=/app/data makes the bind mount work.

Data layout under $DATA_DIR/:

$DATA_DIR/
├── db/
│   ├── data.sqlite       # main SQLite database
│   └── backups/          # auto backups
└── ...                   # certs, logs, runtime configs

Host path: $HOME/.9router/db/data.sqlite Container path: /app/data/db/data.sqlite

Optional env vars

docker run -d \
  -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 \
  decolua/9router:latest

Update to latest

docker pull decolua/9router:latest
docker rm -f 9router
# re-run the quick start command

🛠 For Developers

Build image locally

# from repo root
npm run docker:build

Or directly:

cd app && docker build -t 9router .

Run local build:

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

Publish to Docker Hub (multi-platform)

Triggered automatically by npm run cli:publish. Manual:

# 1. Login once
docker login

# 2. Build amd64 + arm64 + push (tag from app/cli/package.json version)
npm run docker:publish

Tags pushed:

  • decolua/9router:v{version}
  • decolua/9router:latest