Skip to main content
iii provides official Docker images for production and development use. Images are multi-stage builds optimized for security and size.

Quick Start

Pull and run the latest image:

Exposed Ports

iii exposes four ports: Expose all ports:

Configuration

Mount your config file as read-only:
The default entrypoint is:
Override config path:

Environment Variables

Pass environment variables for dynamic configuration:
Common variables:
  • RUST_LOG - Logging level (info, debug, trace)
  • REDIS_URL - Redis connection URL
  • OTEL_ENABLED - Enable OpenTelemetry
  • STREAM_PORT - Stream API port
  • SERVICE_VERSION - Service version for telemetry

Docker Compose

iii includes a docker-compose.yml for running the full stack with Redis and RabbitMQ.

Development Stack

docker-compose.yml
Start the stack:
View logs:
Stop the stack:

Build from Source

To build iii locally instead of using the published image:

Dockerfile Structure

iii provides two Dockerfiles:

Production (Distroless)

Dockerfile - Minimal attack surface, no shell, non-root user:
Features:
  • Distroless base (no shell, minimal packages)
  • Non-root user execution
  • Multi-stage build for smaller images
  • Cargo chef for layer caching

Debug (Debian + Shell)

Dockerfile.debug - Includes shell and debugging tools:
Build debug image:

Building Locally

Production image:
Debug image:
Run local build:

Volumes

Mount volumes for persistent data:
Recommended mounts:
  • /app/config.yaml - Configuration file (read-only)
  • /data - State storage directory
  • /tmp - Temporary files (use tmpfs for performance)

Security

The production image follows security best practices:
Runs as nonroot user (UID 65532) in distroless base
Run with --read-only flag and tmpfs for /tmp:
Drop all capabilities except NET_BIND_SERVICE:
Prevent privilege escalation:
See Production Deployment for hardened setup.

Next Steps

Configuration

Configure modules and environment

Production

Production deployment guide