🐳 Docker Guide - terraform-ingest#
Multi-stage Docker images for CLI, API, and MCP server modes
🚀 Quick Start#
1. Build the Images#
# Build all images
docker-compose build
# Or build individual images
docker build -t terraform-ingest:cli --target cli .
docker build -t terraform-ingest:api --target api .
docker build -t terraform-ingest:mcp --target mcp .
2. Choose Your Mode#
🖥️ CLI Mode (One-off Tasks)#
docker run --rm \
-v $(pwd)/config.yaml:/app/config/config.yaml \
-v $(pwd)/output:/app/output \
terraform-ingest:cli ingest /app/config/config.yaml
🌐 API Mode (REST Service)#
docker run -p 8000:8000 \
-v $(pwd)/config.yaml:/app/config/config.yaml \
-v $(pwd)/output:/app/output \
terraform-ingest:api
Visit: http://localhost:8000/docs
🤖 MCP Mode (AI Agent)#
docker run \
-v $(pwd)/config.yaml:/app/config/config.yaml \
-v $(pwd)/output:/app/output \
terraform-ingest:mcp
👨💻 Dev Mode (Development)#
docker-compose up -d terraform-ingest-dev
docker-compose exec terraform-ingest-dev bash
3. Using Docker Compose#
# Run CLI mode
docker-compose run --rm terraform-ingest-cli ingest /app/config/config.yaml
# Start API service
docker-compose up -d terraform-ingest-api
# View logs
docker-compose logs -f terraform-ingest-api
# Stop all services
docker-compose down
📖 Documentation#
- Full Guide - Comprehensive documentation
- Quick Reference - Common commands
- Implementation Details - How it works
- Checklist - Verification checklist
🎯 Features#
Multi-Stage Builds#
- builder - Compiles application
- runtime-base - Shared runtime
- cli - CLI mode
- api - REST API service
- mcp - MCP server
- dev - Development tools
Security#
✅ Minimal base image (python:3.13-slim)
✅ No build tools in production
✅ Read-only config mounts
✅ Health checks
✅ Trivy security scanning
Developer Experience#
✅ Docker Compose profiles
✅ Volume mounts for development
✅ Hot reloading support
✅ Full testing environment
Production Ready#
✅ Health check endpoints
✅ Graceful error handling
✅ Configurable logging
✅ Multi-worker support
✅ Resource limits
📋 Configuration#
Create a config.yaml:
repositories:
- url: https://github.com/terraform-aws-modules/terraform-aws-vpc
branches: ["main"]
recursive: true
output_dir: ./output
clone_dir: ./repos
mcp:
auto_ingest: true
ingest_on_startup: false
refresh_interval_hours: 24
🔧 Common Tasks#
Run Ingestion#
docker-compose run --rm terraform-ingest-cli ingest /app/config/config.yaml
Start API#
docker-compose up -d terraform-ingest-api
curl http://localhost:8000/health
View Logs#
docker-compose logs -f terraform-ingest-api
Stop Services#
docker-compose down
Development#
docker-compose up -d terraform-ingest-dev
docker-compose exec terraform-ingest-dev bash
pytest tests/
📦 Volume Mounts#
| Mount | Purpose | Required |
|---|---|---|
/app/config/config.yaml |
Config file | Yes |
/app/output |
Results | Yes |
/app/repos |
Repo cache | Yes |
~/.ssh |
SSH keys | Private repos |
~/.gitconfig |
Git config | Optional |
🌍 Environment Variables#
API Mode:
- UVICORN_PORT (default: 8000)
- UVICORN_LOG_LEVEL (default: info)
- UVICORN_WORKERS (default: 1)
MCP Mode:
- TERRAFORM_INGEST_MCP_AUTO_INGEST (default: true)
- TERRAFORM_INGEST_MCP_INGEST_ON_STARTUP (default: false)
- TERRAFORM_INGEST_MCP_REFRESH_INTERVAL_HOURS (default: 24)
All Modes:
- TERRAFORM_INGEST_CONFIG (default: /app/config/config.yaml)
🐛 Troubleshooting#
Container won't start#
docker logs <container_name>
Permission denied#
chmod 600 ~/.ssh/id_rsa
chmod 700 ~/.ssh
Port already in use#
docker run -p 8001:8000 terraform-ingest:api # Use different port
See logs#
docker-compose logs -f
📚 More Info#
💡 Tips#
Use profiles for selective startup:
docker-compose --profile api up
docker-compose --profile mcp up
docker-compose --profile cli run --rm terraform-ingest-cli
Share SSH credentials with container:
docker run -v ~/.ssh:/root/.ssh:ro terraform-ingest:cli
Run with custom config:
docker run -v /path/to/custom.yaml:/app/config/config.yaml terraform-ingest:cli
Monitor container health:
docker ps --format "table {{.Names}}\t{{.Status}}"
Ready to use? Start with the Quick Start section above! 🎉
For detailed information, see docker_guide.md