Containers
Operate Radiator container images
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.
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
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