Troubleshooting Guide
Solutions to common problems when using GWorkspace Toolbox.
Installation Issues
Docker Not Starting
Problem: Docker container won't start or immediately exits.
Solutions:
# Check if Docker is running
docker ps
# View container logs
docker-compose logs app
# Check for port conflicts
lsof -i :8000 # macOS/Linux
netstat -ano | findstr :8000 # Windows
# Restart containers
docker-compose down
docker-compose up -dPort Already in Use
Problem: Error message about port 8000 being in use.
Solution: Change the port in docker-compose.yml:
services:
app:
ports:
- "8080:8000" # Use 8080 instead of 8000Then access the app at http://localhost:8080
Credentials File Not Found
Problem: Application can't find credentials.json.
Solutions:
# Check file exists
ls -la credentials.json
# Ensure it's in the project directory
pwd
ls
# Verify docker-compose.yml volume mount
cat docker-compose.yml | grep credentialsAuthentication Issues
OAuth Error: redirect_uri_mismatch
Problem: OAuth error mentioning redirect URI mismatch.
Solution:
- Go to Google Cloud Console
- Navigate to APIs & Services > Credentials
- Edit your OAuth 2.0 Client ID
- Under "Authorized redirect URIs", add:
http://localhost:8000/oauth2callback
- Save and try authenticating again
Authentication Keeps Failing
Problem: Can't complete authentication flow.
Checklist:
- [ ] Admin SDK API is enabled in Google Cloud Console
- [ ] OAuth client redirect URI is configured correctly
- [ ] You're using an administrator account
- [ ] credentials.json is the OAuth client (not Service Account)
- [ ] Browser allows popups from localhost
- [ ] No browser extensions blocking the flow
Reset authentication:
# Stop containers
docker-compose down
# Remove token file
rm token.json
# Start containers
docker-compose up -d
# Try authenticating againToken Expired Errors
Problem: Error messages about expired tokens.
Solution: Delete the token file and re-authenticate:
docker-compose down
rm token.json
docker-compose up -dThen authenticate again through the UI.
Alias Extractor Issues
No Aliases in CSV
Problem: CSV file is empty or missing aliases.
Possible causes:
- No aliases exist: Check Admin Console to verify users have aliases
- Permission issue: Ensure authenticated as admin
- API not enabled: Verify Admin SDK API is enabled
Debug steps:
# Check container logs
docker-compose logs app | grep -i alias
# Verify authentication status
# Check for green indicator in UI
# Test API access in Google Cloud Console API ExplorerExtraction Timeout
Problem: Extraction times out or never completes.
Solutions:
- For large domains (1000+ users), extraction may take 5-10 minutes
- Check Docker container logs for progress
- Ensure stable internet connection
- Increase Docker memory if needed:
services:
app:
deploy:
resources:
limits:
memory: 2GAttribute Injector Issues
"Attribute not found" Error
Problem: Error saying attribute doesn't exist.
Solution:
- Verify custom schema exists in Admin Console:
- Directory > Users > Manage custom attributes
- Check attribute name format:
SchemaName.fieldName - Ensure exact case matching (case-sensitive)
Example:
✗ Wrong: employeeinfo.department
✗ Wrong: EmployeeInfo.Department
✓ Correct: EmployeeInfo.department"OU not found" Error
Problem: Error saying organizational unit doesn't exist.
Solution:
- Verify OU path starts with
/ - Check exact path in Admin Console (case-sensitive)
- No trailing spaces or special characters
Examples:
✗ Wrong: Sales/North America
✗ Wrong: /Sales/North America/ (trailing slash)
✓ Correct: /Sales/North AmericaPermission Denied
Problem: Error about insufficient permissions.
Solutions:
- Authenticate as super administrator
- Or ensure delegated admin has user management permissions
- Check OAuth scopes include user write permissions
No Users Updated
Problem: Operation completes but reports 0 users updated.
Possible causes:
- OU is empty - check Admin Console
- OU path is incorrect
- Tool doesn't recurse into sub-OUs by default
Verify:
# Check container logs
docker-compose logs app | grep -i injectOU Group Sync Issues
"Group not found" Error
Problem: Error saying group doesn't exist.
Solutions:
- Verify group email address is exactly correct
- Check group exists in Admin Console or Gmail
- Ensure you have permission to manage the group
- Group email must be complete:
team@company.com
Test access:
- Try accessing the group in Gmail
- Check if you're a group owner or manager
- Verify group email in Admin Console
Members Not Being Added
Problem: Sync completes but members aren't added to group.
Checklist:
- [ ] Group exists and is accessible
- [ ] OU contains users (not empty)
- [ ] You have permission to manage the group
- [ ] Users aren't already in the group
- [ ] API permissions are correct
Debug:
# Check logs for detailed error messages
docker-compose logs app | grep -i syncMembers Unexpectedly Removed
Problem: Users were removed from the group after sync.
Cause: You're using Full Sync mode, which removes users not in the OU.
Solutions:
- Switch to Smart Sync mode if you want to preserve manual members
- Add removed users to the OU
- Re-add them manually and use Smart Sync going forward
Scheduled Sync Not Running
Problem: Scheduled sync jobs aren't executing.
Checklist:
- [ ] Docker container is running continuously
- [ ] Schedule toggle is enabled in UI
- [ ] Database volume is persisted
- [ ] No errors in container logs
Debug:
# Check if container is running
docker ps | grep gworkspace
# View logs
docker-compose logs -f app
# Check database file exists
ls -la database/
# Verify schedule in UI
# Go to OU Group Sync and check scheduled jobs listReset schedule:
# Stop containers
docker-compose down
# Check database volume
docker volume ls | grep gworkspace
# Restart
docker-compose up -d
# Recreate schedule in UIUI/Interface Issues
Page Not Loading
Problem: Browser shows connection error or blank page.
Solutions:
# Check container is running
docker ps
# Check container health
docker-compose ps
# View logs for errors
docker-compose logs app
# Restart containers
docker-compose restart
# Verify URL
# Should be http://localhost:8000 (not https)Authentication Status Not Showing
Problem: Can't see authentication status or buttons.
Solutions:
- Clear browser cache and cookies
- Try a different browser
- Check browser console for JavaScript errors (F12)
- Ensure page fully loaded before interacting
Language Not Changing
Problem: Language selector doesn't change the interface.
Solutions:
- Refresh the page after selecting language
- Clear browser cache
- Check browser console for errors
Docker Issues
Container Keeps Restarting
Problem: Container enters a restart loop.
Debug:
# View logs to see error
docker-compose logs app
# Common causes:
# - Port conflict
# - Missing files (credentials.json)
# - Permission issues
# - Corrupted database
# Stop and inspect
docker-compose down
docker-compose up
# (without -d to see live output)Watchtower Not Updating
Problem: Watchtower isn't automatically updating the application.
Check:
# Verify Watchtower is running
docker ps | grep watchtower
# Check Watchtower logs
docker-compose logs watchtower
# Manually trigger update
docker-compose pull
docker-compose up -dVolume Permission Errors
Problem: Errors about file permissions in mounted volumes.
Solutions:
# Fix permissions on mounted directories
chmod -R 755 exports/
chmod -R 755 database/
# For credentials
chmod 600 credentials.json
chmod 600 token.jsonPerformance Issues
Slow API Responses
Problem: Operations take much longer than expected.
Possible causes:
- Google API rate limiting (normal for large operations)
- Slow internet connection
- Google Workspace having issues
Solutions:
- Be patient with large domains (1000+ users)
- Check Google Workspace Status Dashboard
- Operations will automatically retry and continue
High Memory Usage
Problem: Docker container using excessive memory.
Solutions:
# Add resource limits in docker-compose.yml
services:
app:
deploy:
resources:
limits:
memory: 1G
reservations:
memory: 512MAPI & Network Issues
SSL Certificate Errors
Problem: SSL/TLS certificate errors when calling Google APIs.
Solutions:
# Usually caused by system time being wrong
# Check system time
date
# Synchronize system time
# macOS:
sudo sntp -sS time.apple.com
# Linux:
sudo ntpdate time.nist.govConnection Timeout
Problem: Requests to Google APIs timing out.
Checklist:
- [ ] Internet connection is stable
- [ ] Firewall allows outbound HTTPS (port 443)
- [ ] Proxy settings if behind corporate firewall
- [ ] Google Workspace services are operational
Database Issues
Corrupted Database
Problem: Scheduled syncs not loading or database errors.
Solution: Reset the database:
# Backup current database
cp -r database/ database_backup/
# Stop containers
docker-compose down
# Remove database
rm -rf database/*
# Restart - will create fresh database
docker-compose up -d
# Recreate your sync schedulesGetting More Help
Enable Debug Logging
For more detailed logs:
# In docker-compose.yml, add environment variable
services:
app:
environment:
- PORT=8000
- HOST=0.0.0.0
- LOG_LEVEL=DEBUG # Add this lineCollect Diagnostic Information
When reporting issues, include:
# System info
docker --version
docker-compose --version
uname -a # or systeminfo on Windows
# Container status
docker-compose ps
# Recent logs
docker-compose logs --tail=100 app
# Config (remove sensitive data)
cat docker-compose.ymlReport Issues
If you can't resolve the issue:
- Check GitHub Issues for similar problems
- Review the FAQ
- Open a new issue with:
- Clear description of the problem
- Steps to reproduce
- Log output
- System information
Common Error Messages
"API not enabled"
Fix: Enable Admin SDK API in Google Cloud Console
"Invalid grant"
Fix: Delete token.json and re-authenticate
"Permission denied"
Fix: Authenticate as administrator with proper permissions
"Resource not found"
Fix: Verify OU path or group email is correct
"Rate limit exceeded"
Normal: Operations automatically throttled and retried
Prevention Best Practices
- Always backup before major operations
- Test on small OUs before large-scale changes
- Monitor logs regularly for warnings
- Keep Docker updated for security patches
- Document your syncs to remember configurations
- Use Smart Sync unless you specifically need Full Sync
Still having issues? Open an issue on GitHub with full details.