Troubleshooting
This guide helps you resolve common issues when running TaskTrove.
⚠️ Permission Error
Error Message:
Unable to access data directory. Check volume mounts and permissions.Root Cause
TaskTrove cannot access the /app/data directory inside the container, typically due to missing host directory or lacking read/write permissions.
Your data is stored in the mounted data directory (e.g. ./data) on your host system, and mounted to /app/data inside the container.
This file is automatically created when TaskTrove starts successfully, unless the container does not have read/write permissions to the mounted data directory.
Quick Fix
Step 1: Create the data directory
mkdir -p ./dataStep 2: Run TaskTrove with proper volume mounting
docker run -p 3000:3000 -v ./data:/app/data -d --restart=always --name tasktrove ghcr.io/dohsimpson/tasktroveNote the -v flag, which mounts the ./data directory from your host system to the /app/data directory inside the container.
Step 3: Check Permissions If the directory exists but TaskTrove still can't access it:
# Set proper permissions
chmod 755 ./data
# For persistent permission issues, match container user
sudo chown -R 1000:1000 ./dataVerify Setup
Check that TaskTrove can access the data directory:
# View container logs
docker logs tasktrove
# Test data directory access
docker exec tasktrove ls -la /app/data
docker exec tasktrove cat /app/data/data.json🔄 Data Migration Issues
TaskTrove automatically detects when your data needs to be migrated to support new features. Here's how to handle migration-related issues:
Migration Prompt Appears on Startup
What you'll see:
Data Migration Available
Your data needs to be migrated from version vX.X.X to vY.Y.Y.Solution
- Optional but recommended: Manually back up your data first - See our Backup Guide
- Click "Migrate Now" to start the automatic migration
- The migration will:
- Create a timestamped backup file (data.json.backup-[timestamp])
- Convert data structures to support new features
- Preserve all your existing tasks, projects, and labels
Migration Failed
If migration fails, your original data remains unchanged. The system creates an automatic backup before attempting migration, but doesn't automatically restore it. Common causes:
Corrupted data file:
# Check if data.json is valid JSON
docker exec tasktrove cat /app/data/data.json | python -m json.toolInsufficient permissions:
# Ensure write permissions
chmod 755 ./data
docker exec tasktrove touch /app/data/test.txtRollback After Failed Migration
If you need to rollback after a failed migration attempt:
# List backup files
docker exec tasktrove ls -la /app/data/*.backup-*
# Restore from a backup (replace timestamp with actual backup file)
docker exec tasktrove cp /app/data/data.json.backup-1234567890 /app/data/data.json
# Restart the container
docker restart tasktroveNote: After rollback, you'll be running the old data format with the new TaskTrove version. For full compatibility, downgrade TaskTrove to the previous version:
# Stop and remove current container
docker stop tasktrove
docker rm tasktrove
# Run with specific version tag (e.g., v0.2.0)
docker run -p 3000:3000 -v ./data:/app/data -d --restart=always --name tasktrove ghcr.io/dohsimpson/tasktrove:v0.2.0🔐 Blocked by Authentication Screen After Upgrade
What you'll see:
After upgrading to v0.7.0+, you're unable to access TaskTrove and are stuck at the login screen, creating a password fails with error.
Root Cause
This happens when you set the AUTH_SECRET environment variable before completing the data migration. The authentication system is enabled, but there's no password configured yet because migration wasn't completed first.
Solution
Step 1: Remove the AUTH_SECRET environment variable
# Stop the container
docker stop tasktrove
# Remove the container
docker rm tasktrove
# Restart WITHOUT AUTH_SECRET
docker run -p 3000:3000 -v ./data:/app/data -d --restart=always --name tasktrove ghcr.io/dohsimpson/tasktroveStep 2: Complete the data migration
- Access TaskTrove Web UI without authentication
- Follow the migration prompts in the web UI
- Wait for migration to complete successfully
Step 3: Add authentication (optional)
Once migration is complete, you can now safely enable password protection:
# Stop the container
docker stop tasktrove
docker rm tasktrove
# Restart WITH AUTH_SECRET
docker run -p 3000:3000 -v ./data:/app/data -e AUTH_SECRET=your-secret-key -d --restart=always --name tasktrove ghcr.io/dohsimpson/tasktroveSee the Installation Guide for details on generating a secure AUTH_SECRET.
Step 4: Create your password
- Access TaskTrove at
http://localhost:3000 - Create your password in the web UI
Prevention
When upgrading to v0.7.0+ with password protection, always follow this order:
- ✅ Upgrade to v0.7.0+ without
AUTH_SECRET - ✅ Complete data migration in web UI
- ✅ Set
AUTH_SECRETenvironment variable - ✅ Restart container
- ✅ Create password in web UI