docker.recipes

Rocket + PostgreSQL

advanced

Rust web framework with type-safe routing and PostgreSQL.

Overview

Rocket is a modern, type-safe web framework for Rust that emphasizes compile-time correctness and developer productivity. Built from the ground up to leverage Rust's ownership system and type safety, Rocket provides automatic code generation for routes, request guards, and response handling while catching errors at compile time rather than runtime. The framework features built-in support for JSON, templating, cookies, and async operations, making it ideal for building robust web APIs and applications where performance and reliability are critical. This Rocket and PostgreSQL combination creates a powerful foundation for data-driven web applications that demand both speed and integrity. Rocket's compile-time route verification works alongside PostgreSQL's ACID compliance and advanced query capabilities to eliminate entire classes of runtime errors before they reach production. The stack leverages Rust's zero-cost abstractions with PostgreSQL's mature transaction handling, JSON support, and full-text search capabilities to deliver applications that are both fast and reliable. This configuration targets teams building production-grade web services where type safety, performance, and data consistency are non-negotiable. Rust developers migrating from unsafe web frameworks, financial services requiring bulletproof data handling, and API-first companies needing guaranteed uptime will find this stack particularly valuable. The combination excels in scenarios where catching bugs at compile time saves significant debugging effort and where PostgreSQL's advanced features like window functions, CTEs, and JSON operations provide competitive advantages.

Key Features

  • Compile-time route verification preventing invalid endpoint configurations from reaching production
  • Type-safe request guards and parameter extraction with automatic validation
  • Built-in async support with Tokio runtime integration for high-concurrency applications
  • PostgreSQL JSON/JSONB support for hybrid relational-document data models
  • Advanced PostgreSQL query capabilities including window functions, CTEs, and full-text search
  • Rocket's automatic serialization/deserialization with serde for JSON APIs
  • PostgreSQL's MVCC isolation preventing dirty reads and ensuring data consistency
  • Fairing middleware system for request/response processing and database connection management

Common Use Cases

  • 1Financial APIs requiring ACID transactions and compile-time safety for payment processing
  • 2Real-time analytics dashboards leveraging PostgreSQL's window functions and JSON aggregation
  • 3Multi-tenant SaaS platforms using PostgreSQL's row-level security and Rocket's request guards
  • 4Content management systems combining PostgreSQL's full-text search with Rocket's type-safe routing
  • 5IoT data collection services handling high-throughput sensor data with PostgreSQL's partitioning
  • 6E-commerce platforms requiring complex inventory queries and transaction safety
  • 7API gateways for microservices where type safety prevents integration errors

Prerequisites

  • Rust toolchain (rustc 1.70+) and Cargo package manager installed locally
  • Docker and Docker Compose with minimum 2GB RAM allocated for PostgreSQL operations
  • Basic understanding of Rust ownership, borrowing, and async/await patterns
  • Familiarity with SQL and PostgreSQL-specific features like JSON operators
  • Knowledge of Diesel ORM or SQLx for database integration patterns
  • Port 8000 available for Rocket web server access

For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms

docker-compose.yml

docker-compose.yml
1services:
2 rocket:
3 build: .
4 container_name: rocket
5 environment:
6 DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}
7 ports:
8 - "8000:8000"
9 depends_on:
10 - postgres
11 networks:
12 - rocket-network
13
14 postgres:
15 image: postgres:16-alpine
16 environment:
17 POSTGRES_DB: ${DB_NAME}
18 POSTGRES_USER: ${DB_USER}
19 POSTGRES_PASSWORD: ${DB_PASSWORD}
20 volumes:
21 - postgres_data:/var/lib/postgresql/data
22 networks:
23 - rocket-network
24
25volumes:
26 postgres_data:
27
28networks:
29 rocket-network:
30 driver: bridge

.env Template

.env
1DB_NAME=rocket
2DB_USER=rocket
3DB_PASSWORD=changeme

Usage Notes

  1. 1Docs: https://rocket.rs/guide/
  2. 2Access at http://localhost:8000
  3. 3Type-safe routes with compile-time checking
  4. 4Async with Tokio runtime
  5. 5Use Diesel or SQLx for database access
  6. 6Multi-stage Dockerfile: build with rust, run with minimal image

Individual Services(2 services)

Copy individual services to mix and match with your existing compose files.

rocket
rocket:
  build: .
  container_name: rocket
  environment:
    DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}
  ports:
    - "8000:8000"
  depends_on:
    - postgres
  networks:
    - rocket-network
postgres
postgres:
  image: postgres:16-alpine
  environment:
    POSTGRES_DB: ${DB_NAME}
    POSTGRES_USER: ${DB_USER}
    POSTGRES_PASSWORD: ${DB_PASSWORD}
  volumes:
    - postgres_data:/var/lib/postgresql/data
  networks:
    - rocket-network

Quick Start

terminal
1# 1. Create the compose file
2cat > docker-compose.yml << 'EOF'
3services:
4 rocket:
5 build: .
6 container_name: rocket
7 environment:
8 DATABASE_URL: postgres://${DB_USER}:${DB_PASSWORD}@postgres:5432/${DB_NAME}
9 ports:
10 - "8000:8000"
11 depends_on:
12 - postgres
13 networks:
14 - rocket-network
15
16 postgres:
17 image: postgres:16-alpine
18 environment:
19 POSTGRES_DB: ${DB_NAME}
20 POSTGRES_USER: ${DB_USER}
21 POSTGRES_PASSWORD: ${DB_PASSWORD}
22 volumes:
23 - postgres_data:/var/lib/postgresql/data
24 networks:
25 - rocket-network
26
27volumes:
28 postgres_data:
29
30networks:
31 rocket-network:
32 driver: bridge
33EOF
34
35# 2. Create the .env file
36cat > .env << 'EOF'
37DB_NAME=rocket
38DB_USER=rocket
39DB_PASSWORD=changeme
40EOF
41
42# 3. Start the services
43docker compose up -d
44
45# 4. View logs
46docker compose logs -f

One-Liner

Run this command to download and set up the recipe in one step:

terminal
1curl -fsSL https://docker.recipes/api/recipes/rocket-postgres/run | bash

Troubleshooting

  • Rocket compilation errors about missing derives: Add #[derive(Serialize, Deserialize)] to your data structures
  • Database connection pool exhaustion during high load: Increase PostgreSQL max_connections and configure proper pool sizing in Diesel/SQLx
  • Rocket route conflicts at compile time: Use route ranking with rank attribute or more specific route patterns
  • PostgreSQL container startup race condition: Add health checks to docker-compose depends_on or implement retry logic in Rocket startup
  • Type mismatch errors with database queries: Ensure Rust types match PostgreSQL schema exactly, especially for nullable fields
  • Rocket async runtime conflicts: Use #[rocket::async_test] for testing and ensure all database calls use async variants

Community Notes

Loading...
Loading notes...

Download Recipe Kit

Get all files in a ready-to-deploy package

Includes docker-compose.yml, .env template, README, and license

Ad Space