Implements manual track matching (discovery fix modal) for YouTube, Tidal, and Beatport platforms, allowing users to search and select Spotify tracks for unmatched results. Adds backend endpoints and frontend logic for updating matches, improves conversion of discovery results for sync/download, and updates Dockerfile/entrypoint for dynamic PUID/PGID/UMASK support. Includes a new DOCKER_PERMISSIONS.md guide.
5.3 KiB
Docker Permissions Guide
Understanding PUID/PGID/UMASK
SoulSync supports dynamic user/group ID configuration to ensure files are created with the correct ownership, especially important when sharing files with other containers like Lidarr, Sonarr, or Plex.
What are PUID and PGID?
- PUID (Process User ID): The numeric user ID the container runs as
- PGID (Process Group ID): The numeric group ID the container runs as
- UMASK: Controls default permissions for newly created files/directories
Quick Start
Finding Your IDs
On your host system, run:
id your_username
Example output:
uid=1000(myuser) gid=1000(myuser) groups=1000(myuser),999(docker)
Your PUID is 1000 and PGID is 1000.
Matching Lidarr/Sonarr/Plex
If you're using SoulSync with Lidarr, check Lidarr's docker-compose to see what PUID/PGID it uses:
# Your Lidarr container
services:
lidarr:
environment:
- PUID=99
- PGID=100
Then set SoulSync to match:
# Your SoulSync container
services:
soulsync:
environment:
- PUID=99 # Match Lidarr
- PGID=100 # Match Lidarr
- UMASK=002 # Allows group write permissions
Common Scenarios
Scenario 1: Sharing with Lidarr (Unraid)
Problem: Lidarr can't import files downloaded by SoulSync
Solution: Match the PUID/PGID
services:
soulsync:
environment:
- PUID=99 # Common Unraid user
- PGID=100 # Common Unraid group
- UMASK=002
Scenario 2: Single User System
Problem: Default 1000:1000 works but want to match your user
Solution: Use your user's IDs (run id command)
services:
soulsync:
environment:
- PUID=1000 # Your user ID
- PGID=1000 # Your group ID
- UMASK=022
Scenario 3: Multiple Containers Sharing Files
Problem: Multiple containers (Plex, Lidarr, SoulSync) need access to same files
Solution: All containers should use same PUID/PGID
services:
plex:
environment:
- PUID=1000
- PGID=1000
lidarr:
environment:
- PUID=1000
- PGID=1000
soulsync:
environment:
- PUID=1000
- PGID=1000
- UMASK=002 # Allows all containers to write
UMASK Values Explained
UMASK controls default permissions:
-
022: Files:
644(rw-r--r--), Directories:755(rwxr-xr-x)- Owner: read/write
- Group: read only
- Others: read only
- Use when: Only you need to modify files
-
002: Files:
664(rw-rw-r--), Directories:775(rwxrwxr-x)- Owner: read/write
- Group: read/write
- Others: read only
- Use when: Multiple containers share the same group and need write access
-
000: Files:
666(rw-rw-rw-), Directories:777(rwxrwxrwx)- Everyone: full access
- Use when: Not recommended (security risk)
Troubleshooting
Permission Denied Errors
Symptom:
Permission denied: Access to the path '/music/Artist/Album/track.flac' is denied.
Diagnosis:
-
Check file ownership:
ls -la /path/to/music/Artist/Album/ -
Check what user Lidarr runs as:
docker exec lidarr id -
Check what user SoulSync runs as:
docker exec soulsync-webui id
Fix: Ensure both containers use the same PUID/PGID
Files Created with Wrong Owner
Symptom: Files show as 1000:1000 even though you set PUID=99 PGID=100
Cause: Container needs to be rebuilt after changing PUID/PGID
Fix:
docker-compose down
docker-compose up -d
Existing Files Have Wrong Permissions
Symptom: Old files created before changing PUID/PGID have wrong ownership
Fix: Manually fix ownership:
# Find your download directory
docker exec soulsync-webui ls -la /app/downloads
# Fix ownership (run on host, not in container)
sudo chown -R 99:100 /path/to/downloads
Advanced: Custom Entrypoint
The container uses /entrypoint.sh to handle PUID/PGID. When the container starts:
- Reads
PUID,PGID,UMASKenvironment variables - Changes the internal
soulsyncuser to match those IDs - Fixes permissions on app directories
- Starts Python app as that user
You can verify this by checking container logs:
docker logs soulsync-webui
Look for:
🐳 SoulSync Container Starting...
📝 User Configuration:
PUID: 99
PGID: 100
UMASK: 002
🔧 Adjusting user permissions...
Changing group ID from 1000 to 100
Changing user ID from 1000 to 99
🚀 Starting SoulSync Web Server...
Example docker-compose.yml
version: '3.8'
services:
soulsync:
image: boulderbadgedad/soulsync:latest
container_name: soulsync-webui
environment:
# Match these to your Lidarr/Plex/other containers
- PUID=99
- PGID=100
- UMASK=002
- TZ=America/New_York
ports:
- "8008:8008"
volumes:
- ./config:/app/config
- ./logs:/app/logs
- ./downloads:/app/downloads
- /mnt/user/Music:/music:rw # Shared music library
restart: unless-stopped
Need Help?
If you're still experiencing permission issues:
- Check container logs:
docker logs soulsync-webui - Verify PUID/PGID:
docker exec soulsync-webui id - Check file permissions:
docker exec soulsync-webui ls -la /app/downloads - Open an issue on GitHub with the output of these commands