This guide covers common Docker issues and their solutions for PayD development.
- Installation Issues
- Permission Errors
- Port Mapping Issues
- Service Health Checks
- Database Connection Issues
- Performance Issues
- Debugging Tips
Error: docker: command not found
Solution:
- macOS: Install Docker Desktop from https://www.docker.com/products/docker-desktop
- Linux:
sudo apt-get update sudo apt-get install docker.io docker-compose sudo usermod -aG docker $USER # Log out and back in for group changes to take effect
- Windows: Install Docker Desktop for Windows with WSL 2 backend
Error: Cannot connect to the Docker daemon
Solution:
- macOS: Open Docker Desktop application
- Linux:
sudo systemctl start docker sudo systemctl enable docker # Auto-start on boot
- Windows: Open Docker Desktop application
Error: docker-compose: command not found or version conflicts
Solution:
# Check version
docker-compose --version
# Update Docker Compose (if using standalone)
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Or use Docker Compose V2 (built into Docker)
docker compose --versionError: permission denied while trying to connect to the Docker daemon socket
Solution:
# Add current user to docker group
sudo usermod -aG docker $USER
# Apply group changes without logging out
newgrp docker
# Verify
docker psError: permission denied when accessing mounted volumes
Solution:
# Check volume permissions
ls -la backend/
# Fix permissions (if needed)
sudo chown -R $USER:$USER backend/
# Or run Docker with user context
docker-compose exec -u $(id -u):$(id -g) api npm run devError: Error response from daemon: container is in use
Solution:
# Stop all containers
docker-compose down
# Force remove container
docker rm -f <container_id>
# Clean up all stopped containers
docker container pruneError: bind: address already in use or Ports are not available
Solution:
-
Find process using port:
# macOS/Linux lsof -i :3001 # Windows netstat -ano | findstr :3001
-
Kill process or change port:
# Kill process (macOS/Linux) kill -9 <PID> # Or change port in docker-compose.yml ports: - "3002:3001" # Use 3002 instead of 3001
-
Restart services:
docker-compose down docker-compose up
Error: Cannot connect to service on mapped port
Solution:
# Verify port mapping
docker-compose ps
# Check if service is listening
docker-compose exec api netstat -tlnp | grep 3001
# Test connection
curl http://localhost:3001/health
# If still failing, check firewall
# macOS: System Preferences > Security & Privacy > Firewall
# Linux: sudo ufw allow 3001
# Windows: Windows Defender Firewall > Allow app through firewallIssue: Ports not accessible from host
Solution:
# For Docker Desktop, use localhost or 127.0.0.1
curl http://localhost:3001
# Not the Docker IP (usually 172.17.0.1)
# If using Docker Machine, get the IP:
docker-machine ip default# View all services
docker-compose ps
# View logs for specific service
docker-compose logs api
docker-compose logs postgres
docker-compose logs redis
# Follow logs in real-time
docker-compose logs -f api
# View last 100 lines
docker-compose logs --tail=100 api# From backend directory
./scripts/docker-health-check.sh
# Expected output:
# ✓ API is healthy
# ✓ PostgreSQL is healthy
# ✓ Redis is healthy# Check API health
curl http://localhost:3001/health
# Check PostgreSQL
docker-compose exec postgres pg_isready -U payd_user -d payd_db
# Check Redis
docker-compose exec redis redis-cli ping
# Expected: PONGError: could not connect to server: Connection refused
Solution:
# Verify PostgreSQL is running
docker-compose ps postgres
# Check logs
docker-compose logs postgres
# Restart PostgreSQL
docker-compose restart postgres
# Verify connection
docker-compose exec postgres psql -U payd_user -d payd_db -c "SELECT 1"Error: FATAL: password authentication failed for user "payd_user"
Solution:
# Check .env file
cat backend/.env
# Verify credentials match docker-compose.yml
# Default: payd_user / payd_password
# Reset database (WARNING: deletes all data)
docker-compose down -v
docker-compose up postgresError: database "payd_db" does not exist
Solution:
# Run migrations
docker-compose exec api npm run db:migrate
# Or manually create database
docker-compose exec postgres psql -U payd_user -c "CREATE DATABASE payd_db"Error: remaining connection slots are reserved for non-replication superuser connections
Solution:
# Increase connection pool in .env
DATABASE_URL=postgresql://payd_user:payd_password@postgres:5432/payd_db?max=20
# Or restart PostgreSQL to clear connections
docker-compose restart postgres
# Check active connections
docker-compose exec postgres psql -U payd_user -d payd_db -c "SELECT count(*) FROM pg_stat_activity"Issue: Services take >30 seconds to start
Solution:
# Check resource allocation
docker stats
# Increase Docker resources (Docker Desktop)
# Preferences > Resources > Memory/CPU
# Or use resource limits in docker-compose.yml
services:
api:
deploy:
resources:
limits:
cpus: '1'
memory: 1G
reservations:
cpus: '0.5'
memory: 512MError: OOMKilled or container exits unexpectedly
Solution:
# Check memory usage
docker stats
# Increase Docker memory limit
# Docker Desktop: Preferences > Resources > Memory
# Or set memory limit in docker-compose.yml
services:
api:
mem_limit: 2gIssue: Queries take >1 second
Solution:
# Enable query logging
docker-compose exec postgres psql -U payd_user -d payd_db -c "ALTER SYSTEM SET log_min_duration_statement = 1000"
# Restart PostgreSQL
docker-compose restart postgres
# View slow queries
docker-compose logs postgres | grep "duration:"
# Analyze query plan
docker-compose exec postgres psql -U payd_user -d payd_db -c "EXPLAIN ANALYZE SELECT ..."Error: no space left on device
Solution:
# Check disk usage
docker system df
# Clean up unused images/containers
docker system prune
# Remove all unused volumes (WARNING: deletes data)
docker volume prune
# Remove specific volume
docker volume rm payd_postgres_data# Access API container
docker-compose exec api sh
# Access PostgreSQL container
docker-compose exec postgres bash
# Access Redis container
docker-compose exec redis sh
# Run command in container
docker-compose exec api npm run lint# All services
docker-compose logs
# Specific service
docker-compose logs api
# Follow logs
docker-compose logs -f api
# Last 50 lines
docker-compose logs --tail=50 api
# Timestamps
docker-compose logs --timestamps api
# Since specific time
docker-compose logs --since 2024-01-15T10:00:00 api# View container details
docker inspect <container_id>
# View environment variables
docker inspect <container_id> | grep -A 20 "Env"
# View mounted volumes
docker inspect <container_id> | grep -A 10 "Mounts"
# View network settings
docker inspect <container_id> | grep -A 10 "NetworkSettings"# Check container network
docker network ls
# Inspect network
docker network inspect payd_network
# Test DNS resolution
docker-compose exec api nslookup postgres
# Test connectivity
docker-compose exec api curl http://postgres:5432# Connect to database
docker-compose exec postgres psql -U payd_user -d payd_db
# List tables
\dt
# View table structure
\d employees
# Run query
SELECT * FROM employees LIMIT 5;
# Exit
\q# Connect to Redis
docker-compose exec redis redis-cli
# Check keys
KEYS *
# Get value
GET key_name
# Monitor commands
MONITOR
# Exit
EXIT# Stop and remove all containers/volumes
docker-compose down -v
# Remove images
docker-compose rm -f
# Start fresh
docker-compose up
# Run migrations
docker-compose exec api npm run db:migrate# Restart API
docker-compose restart api
# Restart PostgreSQL
docker-compose restart postgres
# Restart Redis
docker-compose restart redis# Rebuild images
docker-compose build --no-cache
# Restart services
docker-compose up# CPU, memory, network usage
docker stats
# Specific container
docker stats payd_api_1# Dump database
docker-compose exec postgres pg_dump -U payd_user payd_db > backup.sql
# Restore database
docker-compose exec -T postgres psql -U payd_user payd_db < backup.sqlIf you're still experiencing issues:
- Check logs:
docker-compose logs -f - Verify configuration:
cat backend/.envanddocker-compose.yml - Test connectivity:
docker-compose exec api curl http://postgres:5432 - Search issues: https://github.com/Gildado/PayD/issues
- Ask for help: Open a new issue with:
- Error message
- Docker version:
docker --version - Docker Compose version:
docker-compose --version - OS and version
- Steps to reproduce
- Output of
docker-compose psanddocker-compose logs