# Docker Troubleshooting Reference ## Common Errors | Error | Cause | Solution | |-------|-------|----------| | Container exits immediately | Bad entrypoint, missing deps | Check logs, verify CMD | | Port already in use | Conflict with host/other container | `lsof -i :`, change mapping | | Volume permission denied | UID mismatch | Check ownership, use named volumes | | Network not found | Network removed/not created | `docker network create` | | Image pull failed | Registry/auth/name issue | Check registry, credentials, name | | OOM killed | Exceeded memory limit | Increase limit or optimize app | | DNS resolution failed | Network config issue | Check DNS settings, network mode | | Health check failing | App not responding | Check command, increase timeout | ## Diagnostic Commands ### Container Status ```bash # List all containers (including stopped) docker ps -a # Check exit code docker inspect --format '{{.State.ExitCode}}' # Check restart count docker inspect --format '{{.RestartCount}}' ``` ### Logs ```bash # View logs docker logs # Follow logs docker logs -f # Last N lines docker logs --tail 100 # With timestamps docker logs -t # Since time docker logs --since 10m ``` ### Resource Usage ```bash # Real-time stats docker stats # Single container docker stats # Disk usage docker system df docker system df -v # Verbose ``` ### Container Details ```bash # Full inspection docker inspect # Specific fields docker inspect --format '{{.State.Status}}' docker inspect --format '{{json .NetworkSettings.Networks}}' docker inspect --format '{{.Mounts}}' ``` ### Process and Network ```bash # Running processes docker top # Execute command docker exec ps aux docker exec netstat -tlnp # Network connectivity docker exec ping docker exec curl docker exec nslookup ``` ## Troubleshooting Workflows ### Container Won't Start 1. Check logs: `docker logs ` 2. Check exit code: `docker inspect --format '{{.State.ExitCode}}'` 3. Run interactively: `docker run -it sh` 4. Check entrypoint/cmd: `docker inspect --format '{{.Config.Cmd}}'` ### Container Keeps Restarting 1. Check logs for errors 2. Verify health check if configured 3. Check resource limits (OOM) 4. Test entrypoint manually ### Network Issues 1. Verify network exists: `docker network ls` 2. Check container attached: `docker inspect --format '{{.NetworkSettings.Networks}}'` 3. Test DNS: `docker exec nslookup ` 4. Check port mapping: `docker port ` ### Volume Issues 1. Check mount: `docker inspect --format '{{.Mounts}}'` 2. Verify permissions inside: `docker exec ls -la /path` 3. Check host path exists (bind mounts) 4. Try named volume instead ### Performance Issues 1. Check resource usage: `docker stats` 2. Review limits: `docker inspect --format '{{.HostConfig.Memory}}'` 3. Check for resource contention 4. Profile application inside container ## Cleanup ```bash # Remove stopped containers docker container prune # Remove unused images docker image prune # Remove unused volumes docker volume prune # Remove unused networks docker network prune # Remove everything unused docker system prune -a --volumes ``` ## Debugging Compose ```bash # Validate compose file docker compose config # See what would run docker compose config --services # Check why service isn't starting docker compose logs # Force recreate docker compose up -d --force-recreate # Rebuild images docker compose up -d --build ``` ## Common Compose Issues | Problem | Check | |---------|-------| | Service not starting | `docker compose logs ` | | depends_on not working | Service starts but app not ready (use healthcheck) | | Volume not persisting | Check volume name, not recreated | | Env vars not loading | Check .env file location, syntax | | Network errors | Check network names, external networks | ## Health Check Debugging ```bash # Check health status docker inspect --format '{{.State.Health.Status}}' # View health log docker inspect --format '{{json .State.Health}}' | jq # Test health command manually docker exec ``` ## Emergency Recovery ### Force Stop ```bash docker kill ``` ### Remove Stuck Container ```bash docker rm -f ``` ### Reset Docker ```bash # Restart Docker daemon sudo systemctl restart docker # Or on macOS # Restart Docker Desktop ```