Skip to main content

Docker Setup

Complete guide for running FishingLog Backend with Docker.

Prerequisites

  • Docker Desktop installed and running
  • Docker Compose (included with Docker Desktop)

Quick Start

# Start all services (API + Database)
docker-compose -f docker-compose.override.yml up --build

# Or start in detached mode
docker-compose -f docker-compose.override.yml up -d --build

Access the API at:

  • HTTPS: https://localhost:5100
  • HTTP: http://localhost:5101

Docker Compose Files

docker-compose.yml

Base configuration with database only.

docker-compose.override.yml

Development overrides including API service.

Services

Database Service

db:
image: postgres:16
container_name: fishinglog_postgres
ports:
- "5432:5432"
environment:
POSTGRES_USER: fishinglog_user
POSTGRES_PASSWORD: supersecurepassword
POSTGRES_DB: fishinglog_db
volumes:
- pgdata:/var/lib/postgresql/data

API Service

api:
build:
context: .
dockerfile: Dockerfile
container_name: fishinglog_api
ports:
- "5100:80" # HTTP
- "5101:443" # HTTPS
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ConnectionStrings__DefaultConnection=Host=db;Port=5432;Database=fishinglog_db;Username=fishinglog_user;Password=supersecurepassword
depends_on:
- db

Common Docker Commands

Start Services

# Start all services
docker-compose -f docker-compose.override.yml up

# Start in detached mode (background)
docker-compose -f docker-compose.override.yml up -d

# Rebuild and start
docker-compose -f docker-compose.override.yml up --build

Stop Services

# Stop all services
docker-compose -f docker-compose.override.yml down

# Stop and remove volumes (⚠️ deletes database data)
docker-compose -f docker-compose.override.yml down -v

View Logs

# View all logs
docker-compose -f docker-compose.override.yml logs

# Follow logs (live)
docker-compose -f docker-compose.override.yml logs -f

# View API logs only
docker-compose -f docker-compose.override.yml logs -f api

# View database logs only
docker-compose -f docker-compose.override.yml logs -f db

Execute Commands

# Run migrations inside API container
docker-compose -f docker-compose.override.yml exec api dotnet ef database update --project FishingLog.Infrastructure --startup-project FishingLog.API

# Access database shell
docker-compose -f docker-compose.override.yml exec db psql -U fishinglog_user -d fishinglog_db

# Access API container shell
docker-compose -f docker-compose.override.yml exec api /bin/bash

Database Management

Access Database

# Using Docker exec
docker exec -it fishinglog_postgres psql -U fishinglog_user -d fishinglog_db

# Or using psql from host
psql -h localhost -U fishinglog_user -d fishinglog_db

Backup Database

# Create backup
docker exec fishinglog_postgres pg_dump -U fishinglog_user fishinglog_db > backup.sql

# Restore backup
docker exec -i fishinglog_postgres psql -U fishinglog_user fishinglog_db < backup.sql

Reset Database

⚠️ WARNING: This will delete all data!

# Stop and remove volumes
docker-compose -f docker-compose.override.yml down -v

# Start fresh
docker-compose -f docker-compose.override.yml up -d db

# Run migrations
docker-compose -f docker-compose.override.yml exec api dotnet ef database update --project FishingLog.Infrastructure --startup-project FishingLog.API

Troubleshooting

Port Already in Use

If ports 5100, 5101, or 5432 are already in use:

  1. Change ports in docker-compose.override.yml:

    ports:
    - "5102:80" # Change HTTP port
    - "5103:443" # Change HTTPS port
  2. Or stop the conflicting service

Container Won't Start

  1. Check logs:

    docker-compose -f docker-compose.override.yml logs api
  2. Rebuild containers:

    docker-compose -f docker-compose.override.yml build --no-cache
  3. Check Docker Desktop is running

Database Connection Issues

  1. Verify database is running:

    docker-compose -f docker-compose.override.yml ps
  2. Check database logs:

    docker-compose -f docker-compose.override.yml logs db
  3. Verify connection string in environment variables

HTTPS Certificate Issues

Ensure certificate exists:

# Create certificate
mkdir -p ~/.aspnet/https
dotnet dev-certs https -ep ~/.aspnet/https/aspnetapp.pfx -p password123

# Trust certificate
dotnet dev-certs https --trust

Production Dockerfile

The Dockerfile is configured for production deployment to AWS ECS:

  • Uses .NET 9.0 runtime
  • Exposes ports 80 (HTTP) and 443 (HTTPS)
  • Includes health checks
  • Optimized for containerization

See Deployment Guide for production deployment.

Next Steps