Immich crashes at startup — looking for upload/upload/.immich despite correct mount

I'm self-hosting Immich on a VM (Ubuntu, Docker Compose), and trying to store all uploaded media directly in: /mnt/library/Sources/Phones

My setup:
docker-compose.yml (relevant snippet):
immich-server:
    volumes:
      - /mnt/library/Sources/Phones:/usr/src/app/upload
      - /mnt/library/Sources/Phones/thumbs:/usr/src/app/upload/thumbs
      - /mnt/library/Sources/Phones/encoded-video:/usr/src/app/upload/encoded-video
      - /mnt/library/Sources/Phones/profile:/usr/src/app/upload/profile
      - /mnt/backups/servers/immich:/usr/src/app/upload/backups
    environment:
      UPLOAD_LOCATION: /usr/src/app/upload
      THUMB_LOCATION: /usr/src/app/upload/thumbs
      ENCODED_VIDEO_LOCATION: /usr/src/app/upload/encoded-video
      PROFILE_LOCATION: /usr/src/app/upload/profile
      BACKUP_LOCATION: /usr/src/app/upload/backups


Folder structure on host:
/mnt/library/Sources/Phones/
├── .immich
├── thumbs/
├── encoded-video/
├── profile/
├── library/
/mnt/backups/servers/immich/
└── .immich


Even with the correct env vars and mounts, Immich still crashes with:
Failed to read upload/upload/.immich
It appears to be appending upload/ again on top of the UPLOAD_LOCATION.

What I’ve tried:
  • Removing UPLOAD_LOCATION from .env
  • Forcing it via environment: block
  • Pulling latest image and running with -v
  • Matching folder structure + .immich files exactly
What I’m trying to achieve:
Have all user uploads land directly in /mnt/library/Sources/Phones, not inside a nested upload/ folder. What's the correct way to structure this to avoid the upload/upload/.immich fallback?

Thanks in advance! Happy to share full compose and env if needed.
Was this page helpful?