Radiator Server Documentation — v10.34.0

Containers

Operate Radiator container images

Table of Contents
  • Containers
  • Image tags
  • Using the containerized Radiator
  • Running with Compose
  • Running manually

Containers

Radiator publishes minimal container images in the radiatorsoftware/radiator-server Docker Hub repository. These images include the radiator binary and the package-style default payload under /var/lib/radiator. They are designed to run with a read-only root filesystem and do not include a shell. Mount writable storage for logs under /var/log/radiator and optionally for configuration under /var/lib/radiator. If the configuration is not mounted, an existing configuration zip can be imported via GUI.

The image includes an evaluation license for up to 10,000 counted incoming requests per licensed protocol during each Radiator process boot. Radiator uses it directly from the image when no valid license is loaded from the configured license sources. The bundled license is not copied into persistent storage, and any valid configured license takes precedence. See Getting a Radiator License to obtain and install a testing or production license.

A mount over /var/lib/radiator must still contain the required .radconf files, any needed .json5 or .sqlite files, template files, TLS certificates, and management GUI files. You can obtain a complete configuration from an existing Radiator GUI by selecting full export.

Image tags

Container images are available from the Radiator Server repository on Docker Hub. Use latest for the latest released version, or pin a version tag such as 10.33.3 for repeatable deployments.

The rolling nightly tag contains the latest nightly build:

docker pull radiatorsoftware/radiator-server:nightly

Nightly images provide early access to changes that have not yet been included in a release. Use a released version for production deployments.

Using the containerized Radiator

By default, the minimal container does not include a ready-to-use service configuration for tasks such as authenticating users.

If you mount configuration from external storage, provide a complete configuration that also includes the management side. Otherwise, the GUI will not start.

Export works normally with the Radiator container regardless of whether a mounted /var/lib/radiator is used.

Running with Compose

You can use the following Compose file as a starting point.

services:
  radiator:
    image: radiatorsoftware/radiator-server:latest
    container_name: radiator-server
    volumes:
      - radiator-lib:/var/lib/radiator:rw
      - radiator-log:/var/log/radiator:rw
    environment:
      # Management UI admin password hash. Override MANAGEMENT_PASSWORD in the
      # shell or .env file before production deployment.
      - MANAGEMENT_PASSWORD=${MANAGEMENT_PASSWORD:-{argon2}$$argon2id$$v=19$$m=19456,t=2,p=1$$Gogh4zohE/bskDvpWAp0hQ$$Jdr4OtvfqENd7DdM6BpYpACMcDSWi2UknKX0mqpfM+4}
      # Optional monitor-only account password hash; it is absent when unset.
      # - MONITOR_PASSWORD=${MONITOR_PASSWORD}
      # Export operations require writable temporary storage
      - TMPDIR=/var/lib/radiator/tmp
      # Additional environment variable options:
      # Override the default working directory (defaults to /var/lib/radiator)
      # - RADIATOR_SERVER_WORKING_DIR=/var/lib/radiator
      # Override the default configuration directory (defaults to /var/lib/radiator)
      # - RADIATOR_SERVER_CONFIG=/var/lib/radiator
    ports:
      # HTTP management API
      - "8443:8443/tcp"
      # Standard RADIUS authentication
      - "1812:1812/udp"
      # Standard RADIUS accounting
      - "1813:1813/udp"
      # RADIUS over TLS (RadSec), including RADIUS/1.1
      - "2083:2083/tcp"
      # CoA and Disconnect Messages
      - "3799:3799/udp"
      # TACACS+
      - "49:49/tcp"
      # TACACS+ with TLS
      - "300:300/tcp"
      # Optional: Legacy RADIUS authentication port (RFC 2865)
      # - "1645:1645/udp"
      # Optional: Legacy RADIUS accounting port (RFC 2866)
      # - "1646:1646/udp"
      # Security capabilities needed for network functions
    cap_add:
      - NET_ADMIN # Required for network interface operations
      - NET_RAW # Required for raw socket access (for packet capture)
      - NET_BIND_SERVICE # Required to bind to privileged ports (<1024)
    # Drop all other capabilities for security hardening
    cap_drop:
      - ALL
    # Prevent container from gaining additional privileges
    security_opt:
      - no-new-privileges=true
    # Set container filesystem as read-only for additional security
    read_only: true
    deploy:
      resources:
        limits:
          memory: 1g
    restart: unless-stopped
    networks:
      - radiator-net

volumes:
  radiator-lib:
    name: radiator-lib
  radiator-log:
    name: radiator-log

networks:
  radiator-net:
    driver: bridge

The management username is admin, and its initial password is ChangeThisPassword!. Before production deployment, set MANAGEMENT_PASSWORD to a supported password hash of your own password. Set MONITOR_PASSWORD to a supported password hash to enable the optional monitor user with monitor-only privilege; when it is unset or empty, that login does not exist. In the Compose example, $$ preserves the literal $ characters in the hash.

Running manually

You can also run the container manually:

# This example hash corresponds to ChangeThisPassword!; replace it for production.
export MANAGEMENT_PASSWORD='{argon2}$argon2id$v=19$m=19456,t=2,p=1$Gogh4zohE/bskDvpWAp0hQ$Jdr4OtvfqENd7DdM6BpYpACMcDSWi2UknKX0mqpfM+4'
docker run --rm \
  --env MANAGEMENT_PASSWORD \
  --volume radiator-lib:/var/lib/radiator:rw \
  --volume radiator-log:/var/log/radiator:rw \
  --name radiator-server \
  --read-only \
  --publish 8443:8443/tcp \
  --publish 1812:1812/udp \
  --publish 1813:1813/udp \
  --publish 2083:2083/tcp \
  --publish 3799:3799/udp \
  --publish 49:49/tcp \
  --publish 300:300/tcp \
  --memory 1g \
  --cap-add NET_ADMIN \
  --cap-add NET_RAW \
  --cap-add NET_BIND_SERVICE \
  --cap-drop ALL \
  --security-opt no-new-privileges=true \
  radiatorsoftware/radiator-server:latest

Instead of radiator-server:latest, which always uses the latest release, you can choose to run a specific release such as radiator-server:10.33.3.

Use --platform linux/amd64 or --platform linux/arm64 if you need to run a container for a different architecture on a system that supports multiple architectures.

At minimum, expose 8443/tcp for the management GUI and 1812/udp for standard RADIUS authentication.

Navigation
  • Application log message index

  • Architecture Overview

  • Backend Load Balancing

  • Basic Installation

  • Built-in Environment Variables

  • Byte Size Units

  • Certificate Revocation Lists

  • Comparison Operators

  • Configuration Editor

  • Configuration Import and Export

  • Containers

  • Cron and interval timers

  • Data Types

  • Duration Units

  • Environment Variables

  • Execution Context

  • Execution Pipelines

  • Filters

  • Getting a Radiator License

  • Health check /live and /ready

  • High Availability and Load Balancing

  • High availability identifiers

  • HTTP Basic Authentication

  • Introduction

  • Linux systemd support

  • Local AAA Backends

  • Logging

  • Management API privilege levels

  • Namespaces

  • Password Hashing

  • Password Rehashing During Login

  • Probabilistic Sampling

  • Prometheus and OpenMetrics scraping

  • PROXY Protocol Support

  • Radiator server health and boot up logic

  • Radiator sizing

  • Radiator software releases

  • Radiator software security and dependency compliance

  • RadiatorDB

  • RadiatorDB Backup

  • RadiatorDB CLI

  • RadiatorDB Installation

  • RadiatorDB PostgreSQL 10k TPS example

  • RadiatorDB REST API

  • RadiatorDB sizing

  • Rate Limiting

  • Rate Limiting Algorithms

  • Reverse Dynamic Authorization

  • Service Level Objective

  • TACACS+ Authentication, Authorization, and Accounting

  • Template Rendering CLI

  • Timestamps

  • Tools radiator-client

  • TOTP/HOTP Authentication

  • What is Radiator?

  • YubiKey Authentication

  • YubiKey Context Variables