velociraptor

velociraptor

Docker app from GillBates' Repository

Overview

Velociraptor DFIR server running in Docker (xboarder56 fork), adapted for Unraid. Multi-arch image: linux/amd64 and linux/arm64. Mapped services: - Frontend / client ingress: 8000/tcp - API / gRPC gateway: 8001/tcp - Web GUI (HTTPS): 8889/tcp - Prometheus metrics: 8003/tcp Persistent path: - /mnt/user/appdata/velociraptor -> /velociraptor (config, keys, artifacts, repacked client bundles — all stored here) First run: The container auto-generates server.config.yaml and client.config.yaml and repacks Linux (.deb/.rpm amd64+arm64), macOS (amd64+arm64) and Windows (.exe/.msi) clients into /velociraptor/client_bundles/. A small build banner (version, arch, base image, git commit, build date) is printed to the log on every start. Login: Open https://[Unraid-IP]:8889, accept the self-signed TLS certificate and log in with the credentials set via VELOX_DEFAULT_USER / VELOX_DEFAULT_PASSWORD. Change them immediately after first login! Security: - TLS is self-signed by default; rotate keys/certificates from the Velociraptor GUI. - Keep API port 8001 and metrics port 8003 restricted to trusted networks only. - VELOX_DEFAULT_USER/PASSWORD are only used for the initial bootstrap user. Troubleshooting: docker logs -f velociraptor docker exec -it velociraptor sh Source: https://github.com/Xboarder56/velociraptor-docker Fork of: https://github.com/weslambert/velociraptor-docker (Wes Lambert)

GitHub Repository: github.com/Xboarder56/velociraptor-docker


Velociraptor (Server) in Docker

Run the Velocidex Velociraptor server in a container with sensible defaults, HTTPS, and prebuilt client repacks.

  • Architectures: linux/amd64, linux/arm64
  • Ports: 8000 (client/ingest), 8889 (GUI), 8001 (gRPC API), 8003 (Prometheus)
  • Data dir: mount /velociraptor to persist config, keys, artifacts, and repacked clients
  • TLS: self-signed cert generated on first run (you can rotate later)

On start, the container prints a small build banner (version, arch, base image, git commit, build date) so you can confirm what you pulled.


Quick Start

docker run -it --rm \
  -p 8000:8000 -p 8889:8889 -p 8001:8001 -p 8003:8003 \
  -v $PWD/velodata:/velociraptor \
  docker.io/xboarder56/velociraptor:latest

Open https://localhost:8889 (accept the self-signed cert) and log in with the bootstrap credentials below (you should change them right away).

The same command works with Podman by replacing docker with podman. The fully qualified docker.io/... image name avoids short-name registry ambiguity. On SELinux-enforcing hosts, label a bind mount for the container by using -v "$PWD/velodata:/velociraptor:Z".


Runtime Configuration (Environment Variables)

These variables are read at container start—no image rebuilds needed.

Variable Purpose Default
VELOX_CONFIG_MODE Config ownership: reconcile, generated, or external reconcile
VELOX_CONFIG_FILE Server config path; required in external mode server.config.yaml
VELOX_DEFAULT_USER Initial GUI admin username admin
VELOX_DEFAULT_PASSWORD Initial GUI admin password changeme
VELOX_DEFAULT_PASSWORD_FILE Read the initial admin password from a mounted secret file unset
VELOX_DEFAULT_USER_ROLE Role for the bootstrap user administrator
File System
VELOX_FILESTORE_DIRECTORY Root of Velociraptor filestore (collections, uploads) /velociraptor/filestore
VELOX_CLIENT_DIR Directory where repacked clients are stored /velociraptor/client_bundles
Client/Frontend Configuration
VELOX_FRONTEND_HOSTNAME Public hostname for clients (builds client URL) localhost
VELOX_FRONTEND_PORT Public-facing port for clients (builds client URL) 8000
VELOX_FRONTEND_SERVER_SCHEME Public scheme (https/http) for client URLs https
VELOX_FRONTEND_SERVER_URL Full override for the client URL (e.g., https://ingest.example.com/) derived from components
VELOX_SERVER_URL (legacy) Alias for VELOX_FRONTEND_SERVER_URL. Use new variable. n/a
GUI/Admin Configuration
VELOX_GUI_HOSTNAME Public hostname for the admin GUI (builds GUI URL) localhost (or client host)
VELOX_GUI_PORT Public-facing port for the admin GUI (builds GUI URL) 8889
VELOX_GUI_SCHEME Public scheme (http or https for GUI URL https
VELOX_GUI_URL Full override for the GUI URL (e.g., https://admin.example.com/app/index.html) derived from components
Internal Ports
VELOX_API_PORT gRPC API port 8001
VELOX_MONITORING_PORT Metrics port 8003
Logging
VELOX_START_SERVER_VERBOSE true to enable verbose (-v) server logs true
VELOX_LOG_DIR Where component logs write inside container .
VELOX_DEBUG_DISABLED Disable DEBUG in component logs true

Persistent paths (mount a volume):

  • /velociraptor/server.config.yaml — server config (auto-generated)
  • /velociraptor/client.config.yaml — client config
  • /velociraptor/client_bundles/ — repacked client binaries (.deb/.rpm/.exe/.msi)

Configuration ownership modes

The default remains reconcile, preserving the behavior of previous image versions and existing installations.

Mode Behavior
reconcile Generate a missing config, then apply explicitly supplied environment settings on every start. Automatic certificate rotation remains enabled.
generated Generate a missing config, but treat an existing config as authoritative instead of reconciling environment settings. Automatic certificate rotation remains enabled.
external Require VELOX_CONFIG_FILE to reference an existing readable config. The entrypoint never generates, edits, backs up, or rotates this file. Bootstrap-user creation is skipped.

Use an external config with a read-only bind mount:

docker run -it --rm \
  -e VELOX_CONFIG_MODE=external \
  -e VELOX_CONFIG_FILE=/config/server.config.yaml \
  -v "$PWD/server.config.yaml:/config/server.config.yaml:ro" \
  -v "$PWD/velodata:/velociraptor" \
  -p 8000:8000 -p 8889:8889 -p 8001:8001 -p 8003:8003 \
  docker.io/xboarder56/velociraptor:latest

Because external mode cannot replace its configuration, certificate/key rotation must be handled by the external config owner. Generated client configuration and client bundles are still written beneath /velociraptor.

Bootstrap password secrets

VELOX_DEFAULT_PASSWORD_FILE follows the Docker/Podman _FILE convention. It is read only while creating a new server config and bootstrap user. The file must be readable and non-empty, and setting both password variables during initialization is an error.

secrets:
  velociraptor_admin_password:
    file: ./secrets/admin-password

services:
  velociraptor:
    image: docker.io/xboarder56/velociraptor:latest
    environment:
      VELOX_DEFAULT_PASSWORD_FILE: /run/secrets/velociraptor_admin_password
    secrets:
      - velociraptor_admin_password
    volumes:
      - ./velodata:/velociraptor

The secret value is not placed in the container environment or retained by the server process. The secret-file path remains visible in container metadata. Direct VELOX_DEFAULT_PASSWORD remains supported for compatibility, but direct environment values are visible through container inspection.


Common Run Examples

1) Run quietly (INFO mode)

This overrides the default, which is to run with verbose (DEBUG) logs.

docker run -it --rm \
  -p 8000:8000 -p 8889:8889 -p 8001:8001 -p 8003:8003 \
  -v $PWD/velodata:/velociraptor \
  -e VELOX_DEFAULT_USER=admin -e VELOX_DEFAULT_PASSWORD='S3cure!' \
  -e VELOX_START_SERVER_VERBOSE=false \
  docker.io/xboarder56/velociraptor:latest

2) Set the public URL clients should use

docker run -it --rm \
  -e VELOX_FRONTEND_HOSTNAME=velociraptor.example.com \
  -e VELOX_FRONTEND_PORT=443 \
  -e VELOX_FRONTEND_SERVER_SCHEME=https \
  -p 443:8000 -p 8889:8889 \
  -v $PWD/velodata:/velociraptor \
  docker.io/xboarder56/velociraptor:latest

3) Use different public URLs for Client and GUI

docker run -it --rm \
  -e VELOX_FRONTEND_SERVER_URL=https://ingest.example.com:8000/ \
  -e VELOX_GUI_URL=https://admin.example.com:8889/ \
  -p 8000:8000 -p 8889:8889 \
  -v $PWD/velodata:/velociraptor \
  docker.io/xboarder56/velociraptor:latest

Docker Compose

services:
  velociraptor:
    image: docker.io/xboarder56/velociraptor:latest
    restart: unless-stopped
    environment:
      VELOX_CONFIG_MODE: reconcile # backward-compatible default
      VELOX_DEFAULT_USER: admin
      VELOX_DEFAULT_PASSWORD: "S3cure!"
      VELOX_FRONTEND_HOSTNAME: velociraptor.example.com
      VELOX_START_SERVER_VERBOSE: "false"
    ports:
      - "8000:8000"   # client/ingest
      - "8889:8889"   # GUI
      - "8001:8001"   # gRPC API
      - "8003:8003"   # Metrics
    volumes:
      - ./velodata:/velociraptor

What to Expect on First Run

  • The entrypoint generates a secure server.config.yaml and a client.config.yaml.
  • Clients for Linux (amd64 + arm64), macOS (amd64 + arm64), and Windows (exe + msi) are repacked into /velociraptor/client_bundles/ with your server URL.
  • You’ll see logs like:
    • GUI is ready to handle TLS requests on https://localhost:8889/
    • Frontend is ready to handle client TLS requests at https://localhost:8000/

Client Binaries

After startup, check ./velodata/client_bundles/ for repacked binaries:

  • Linux: repacked executables for amd64 and arm64; .deb and .rpm packages for the image's native architecture
  • macOS: repacked executables for amd64 and arm64
  • Windows: .exe and .msi

If a specific upstream client binary isn’t available, the repack step is skipped (you’ll see a log message).


Bundled Triage Artifacts

Every image includes these official Velocidex Triage Artifacts:

  • Linux.Triage.UAC
  • Windows.Triage.Targets

The generated definitions are pinned to an immutable upstream commit, verified by SHA-256 during the image build, validated against the bundled Velociraptor binary, and loaded on every server start. The daily upstream workflow tracks both definitions and opens a revision PR when they change.


Security Notes

  • Change the default credentials on first run; prefer VELOX_DEFAULT_PASSWORD_FILE so the password is not stored in container metadata.
  • TLS is self-signed by default; rotate keys/certificates as needed from the server.
  • Expose GUI/API only where appropriate; consider a reverse proxy or firewall rules.

Troubleshooting

  • Seeing [DEBUG] FlowStorageManager housekeeping run?
    You likely set VELOX_START_SERVER_VERBOSE=true (adds -v). Remove it to suppress DEBUG.
  • Ports already in use? Map them as needed: -p 443:8000 and set VELOX_FRONTEND_PORT=443.

Tags

  • :latest — most recent successful build
  • :<velociraptor-version> — e.g. :0.76.5. Floats to the latest re-release for that upstream patch.
  • :<minor> — e.g. :0.76. Floats across patch releases within that minor.
  • :sha-<short> — e.g. :sha-abc1234. Commit-pinned reproducible reference.
  • Multi-arch manifests are published for amd64 and arm64

Build & Release Flow

This repo uses two GitHub Actions workflows:

  • upstream-check.yml runs daily. It polls the Velocidex release feed and the official Triage artifact project. If it sees a newer release, re-published binaries, or updated Triage definitions, it opens a PR bumping the corresponding lockfiles. For platforms upstream hasn't published yet for the latest release, the workflow walks back through prior releases and pins those assets to the most recent release that does include them.
  • build-publish.yml runs on tag pushes matching v* and on manual dispatch. It:
    1. Builds an amd64 image and runs scripts/ci-image-validation.sh against it (server starts, GUI responds, a repacked Linux client makes contact).
    2. Only if validation passes, does a multi-arch (linux/amd64, linux/arm64) buildx build and pushes to Docker Hub with provenance + SBOM attestations.

To cut a release:

  1. Review and merge the PR from upstream-check.

  2. Tag the merge commit with the value of VELOX_VERSION from versions.env (optionally suffixed with -<IMAGE_REVISION> when IMAGE_REVISION > 1):

    git tag v0.76.8        # first revision
    # or
    git tag v0.76.8-2      # subsequent re-release of the same upstream version
    git push --tags
    
  3. Required Docker Hub secrets on the repo: DOCKERHUB_USERNAME, DOCKERHUB_TOKEN.


About This Fork

This repository is a fork of weslambert/velociraptor-docker, originally created by Wes Lambert.
It aims to maintain compatibility with the latest Velocidex Velociraptor releases while providing additional configuration options and deployment improvements for Docker environments.

All credit for the foundational work goes to Wes Lambert — this fork primarily adds quality-of-life enhancements, updated configurations, and maintenance updates.


Maintained by: Xboarder56
Upstream project: Velocidex Velociraptor

Install Velociraptor on Unraid in a few clicks.

Find Velociraptor in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.

Open the Apps tab on your Unraid server Search Community Apps for Velociraptor Review the template variables and paths Click Install

Download Statistics

1,879
Total Downloads

Related apps

Explore more like this

Explore all

Details

Repository
xboarder56/velociraptor:latest
Last Updated2026-05-26
First Seen2026-06-07

Runtime arguments

Web UI
https://[IP]:[PORT:8889]
Network
bridge
Shell
sh
Privileged
false
Extra Params
--restart unless-stopped --security-opt=no-new-privileges:true

Template configuration

TimezoneVariable

Container timezone, e.g. Etc/UTC or America/New_York.

Target
TZ
Default
Etc/UTC
Admin UsernameVariable

Bootstrap admin username for the Velociraptor GUI. Change after first login.

Target
VELOX_DEFAULT_USER
Default
admin
Admin PasswordVariable

Bootstrap admin password. Change immediately after first login!

Target
VELOX_DEFAULT_PASSWORD
Default
changeme
Admin RoleVariable

Role assigned to the bootstrap user (e.g. administrator, analyst, investigator).

Target
VELOX_DEFAULT_USER_ROLE
Default
administrator
Frontend HostnameVariable

Public hostname clients use to reach the server. Set to your Unraid IP or FQDN.

Target
VELOX_FRONTEND_HOSTNAME
Default
localhost
Frontend PortVariable

Public-facing port clients use to reach the server (built into client URL).

Target
VELOX_FRONTEND_PORT
Default
8000
Frontend SchemeVariable

Scheme for client URL: https (recommended) or http.

Target
VELOX_FRONTEND_SERVER_SCHEME
Default
https
Frontend Server URL (override)Variable

Full client URL override, e.g. https://ingest.example.com:8000/ — overrides Hostname/Port/Scheme if set.

Target
VELOX_FRONTEND_SERVER_URL
GUI HostnameVariable

Public hostname for the admin GUI. Defaults to Frontend Hostname if not set.

Target
VELOX_GUI_HOSTNAME
Default
localhost
GUI PortVariable

Public-facing port for the admin GUI.

Target
VELOX_GUI_PORT
Default
8889
GUI SchemeVariable

Scheme for GUI URL: https or http.

Target
VELOX_GUI_SCHEME
Default
https
GUI URL (override)Variable

Full GUI URL override, e.g. https://admin.example.com:8889/app/index.html — overrides GUI Hostname/Port/Scheme if set.

Target
VELOX_GUI_URL
API / gRPC Port (internal)Variable

Internal gRPC API port. Only change if you have a port conflict.

Target
VELOX_API_PORT
Default
8001
Prometheus Metrics Port (internal)Variable

Internal Prometheus metrics port. Only change if you have a port conflict.

Target
VELOX_MONITORING_PORT
Default
8003
Verbose Server LogsVariable

Set to true to enable verbose (-v) server logs (DEBUG level). Leave false for INFO only.

Target
VELOX_START_SERVER_VERBOSE
Default
false
Frontend / Client IngressPorttcp

Velociraptor frontend/client ingress port. Clients connect here.

Target
8000
Default
8000
API / gRPC GatewayPorttcp

Velociraptor API/gRPC gateway port. Restrict to trusted networks only.

Target
8001
Default
8001
Web GUI (HTTPS)Porttcp

Velociraptor Web GUI. Open https://[IP]:8889 in your browser.

Target
8889
Default
8889
Prometheus MetricsPorttcp

Prometheus metrics endpoint. Restrict to monitoring network if not needed publicly.

Target
8003
Default
8003
Velociraptor DataPathrw

Persistent data directory: config, keys, artifacts and repacked client bundles are all stored here.

Target
/velociraptor
Default
/mnt/user/appdata/velociraptor