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:
-
Change ports in
docker-compose.override.yml:ports:
- "5102:80" # Change HTTP port
- "5103:443" # Change HTTPS port -
Or stop the conflicting service
Container Won't Start
-
Check logs:
docker-compose -f docker-compose.override.yml logs api -
Rebuild containers:
docker-compose -f docker-compose.override.yml build --no-cache -
Check Docker Desktop is running
Database Connection Issues
-
Verify database is running:
docker-compose -f docker-compose.override.yml ps -
Check database logs:
docker-compose -f docker-compose.override.yml logs db -
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
- Local Development - Run without Docker
- Deployment Guide - Deploy to AWS ECS