Docker Compose
Minimal Setup
For most services (SSM, SQS, SNS, S3, DynamoDB, Lambda, API Gateway, Cognito, KMS, Kinesis, Secrets Manager, CloudFormation, Step Functions, IAM, STS, EventBridge, CloudWatch) a single port is enough:
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
Full Setup (with ElastiCache and RDS)
ElastiCache and RDS work by proxying TCP connections to real Docker containers (Valkey/Redis, PostgreSQL, MySQL). Those containers' ports must be reachable from your host, so additional port ranges must be exposed:
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566" # All AWS API calls
- "6379-6399:6379-6399" # ElastiCache / Redis proxy ports
- "7001-7099:7001-7099" # RDS / PostgreSQL + MySQL proxy ports
volumes:
- /var/run/docker.sock:/var/run/docker.sock # required for Lambda, ElastiCache, RDS
- ./data:/app/data
environment:
FLOCI_SERVICES_DOCKER_NETWORK: my-project_default # (1)
- Set this to the Docker network name that your compose project creates (usually
<project-name>_default). Floci uses it to attach spawned Lambda / ElastiCache / RDS containers to the same network.
Docker socket
Lambda, ElastiCache, and RDS require access to the Docker socket (/var/run/docker.sock) to spawn and manage containers. If you don't use these services, you can omit that volume.
Persistence
By default Floci stores all data in memory — data is lost on restart. To persist data to disk, set the storage path and enable persistent mode:
services:
floci:
image: hectorvent/floci:latest
ports:
- "4566:4566"
volumes:
- ./data:/app/data
environment:
FLOCI_STORAGE_MODE: persistent
FLOCI_STORAGE_PERSISTENT_PATH: /app/data
Environment Variables Reference
All application.yml options can be overridden via environment variables using the FLOCI_ prefix with underscores replacing dots and dashes:
| Environment variable | Default | Description |
|---|---|---|
FLOCI_DEFAULT_REGION |
us-east-1 |
AWS region reported in ARNs |
FLOCI_DEFAULT_ACCOUNT_ID |
000000000000 |
AWS account ID used in ARNs |
FLOCI_STORAGE_MODE |
memory |
Global storage mode (memory, persistent, hybrid, wal) |
FLOCI_STORAGE_PERSISTENT_PATH |
./data |
Directory for persistent storage |
FLOCI_SERVICES_LAMBDA_DOCKER_HOST |
unix:///var/run/docker.sock |
Docker host for Lambda containers |
FLOCI_SERVICES_LAMBDA_EPHEMERAL |
false |
Remove Lambda containers after each invocation |
FLOCI_SERVICES_LAMBDA_DEFAULT_MEMORY_MB |
128 |
Default Lambda memory allocation |
FLOCI_SERVICES_LAMBDA_DEFAULT_TIMEOUT_SECONDS |
3 |
Default Lambda timeout |
FLOCI_SERVICES_LAMBDA_CODE_PATH |
./data/lambda-code |
Where Lambda ZIPs are stored |
FLOCI_SERVICES_ELASTICACHE_PROXY_BASE_PORT |
6379 |
First ElastiCache proxy port |
FLOCI_SERVICES_ELASTICACHE_PROXY_MAX_PORT |
6399 |
Last ElastiCache proxy port |
FLOCI_SERVICES_ELASTICACHE_DEFAULT_IMAGE |
valkey/valkey:8 |
Default Redis/Valkey Docker image |
FLOCI_SERVICES_RDS_PROXY_BASE_PORT |
7001 |
First RDS proxy port |
FLOCI_SERVICES_RDS_PROXY_MAX_PORT |
7099 |
Last RDS proxy port |
FLOCI_SERVICES_RDS_DEFAULT_POSTGRES_IMAGE |
postgres:16-alpine |
Default PostgreSQL image |
FLOCI_SERVICES_RDS_DEFAULT_MYSQL_IMAGE |
mysql:8.0 |
Default MySQL image |
FLOCI_SERVICES_RDS_DEFAULT_MARIADB_IMAGE |
mariadb:11 |
Default MariaDB image |
FLOCI_SERVICES_DOCKER_NETWORK |
(none) | Docker network to attach spawned containers |
FLOCI_AUTH_VALIDATE_SIGNATURES |
false |
Verify AWS request signatures |