A modern, full-stack Web GUI and Docker container manager for GitHub Actions self-hosted runners. Easily provision, monitor, control, and update multiple GitHub runner instances from a high-performance web dashboard.
SIGINT signals to the runner listener on Stop/Restart to inform GitHub Actions of cancellation, and dispatches cancellation requests via GitHub REST API on Start/Restart.job-logs.txt): Real-time harvester captures verbatim Azure blob step output from _diag/pages before runner purging, complete with microsecond timestamps, ANSI colors, and ##[group] markers.job-logs.txt) and Runner Daemon Lifecycle logs (runner.log) with search and one-click file download.setup-python/setup-node) and packages (pip wheels, Playwright browsers, npm) into a single persistent cache volume (/home/runner/.cache ➔ /opt/hostedtoolcache), eliminating duplicate downloads across workflows./opt/shared_data) organized by repository, with automatic workspace pre-linking for authentication tokens and credentials./opt/shared_data, runner workspaces, and /app/data./app/data/archive/ and <runnerDir>/logs/archive/, with configurable pruning schedules (never, daily, weekly, monthly, custom days) and unfiltered workflow step outputs in DEBUG mode.Run with Docker Compose using docker-compose.yml:
name: github-runner
services:
github-runner:
image: kerklangsi/github-runner:latest
container_name: github-runner-manager
restart: unless-stopped
network_mode: bridge
ports:
- target: 3000
published: 3000
protocol: tcp
volumes:
- type: bind
source: /var/run/docker.sock
target: /var/run/docker.sock
- type: bind
source: /DATA/AppData/github-runner/data
target: /app/data
- type: bind
source: /DATA/AppData/github-runner/runner
target: /opt/github-runner
- type: bind
source: /DATA/AppData/github-runner/shared_data
target: /opt/shared_data
- type: bind
source: /DATA/AppData/github-runner/cache
target: /home/runner/.cache
Launch with:
docker compose up -d
Access the Web Dashboard at http://localhost:3000 (or http://<your-server-ip>:3000).
docker-compose.yml.Run directly via docker run:
docker run -d \
--name github-runner-manager \
--restart unless-stopped \
-p 3000:3000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /DATA/AppData/github-runner/data:/app/data \
-v /DATA/AppData/github-runner/runner:/opt/github-runner \
-v /DATA/AppData/github-runner/shared_data:/opt/shared_data \
-v /DATA/AppData/github-runner/cache:/home/runner/.cache \
kerklangsi/github-runner:latest
Access the Web Dashboard at http://localhost:3000 (or http://<your-server-ip>:3000).
| Variable | Description | Default |
|---|---|---|
PORT | Web GUI and API server port | 3000 |
DATA_DIR | Persistent database and settings storage | /app/data |
RUNNER_DIR | Working directory for provisioned runners | /opt/github-runner |
SHARED_DATA_DIR | Persistent shared repository storage | /opt/shared_data |
RUNNER_TOOL_CACHE | Unified tool cache location | /opt/hostedtoolcache |
/app/data Docker volume mount.admin credentials immediately.Distributed under the MIT License. See LICENSE for more information.
Made with ❤️ by Kerk Langsi.
Content type
Image
Digest
sha256:54a636a1c…
Size
595.8 MB
Last updated
9 days ago
docker pull kerklangsi/github-runner