Skip to content

Support configurable runtime UID/GID (PUID/PGID) to improve Unraid compatibility (incl. Tailscale) #165

@mattradford

Description

@mattradford

Hi 👋,

I’m running May on Unraid, and I’ve run into a structural compatibility issue which is very common for non‑LSIO images. Unraid’s built‑in Docker integrations (notably Tailscale) assume containers run as nobody:users (UID 99, GID 100), or at least allow the runtime user to be configured.

May currently runs as a fixed, non‑configurable UID (typically 1000), which causes persistent permission conflicts.

This primarily affects:

  • Unraid’s built‑in Tailscale Docker integration
  • Mounted appdata paths (/app/data)
  • Any Unraid feature that expects nobody:users

Even when the container works initially, Unraid may re‑create or re‑own mounted directories on restart, causing state loss (for example .tailscale_state), broken networking, or unstable behaviour.

Impact observed

On Unraid, with the current image:

  • .tailscale_state ownership is repeatedly reset on container restart
  • Tailscale authentication cannot persist
  • tailscale serve configuration disappears
  • Networking appears to “half‑work” (ping sometimes works, HTTPS drops on requests)
  • Manual permission fixes (chown) are reverted automatically

This does not occur with containers that support PUID/PGID (e.g. LSIO images or Duplicati running as nobody:users).

Requested enhancement

✅ Add support for configurable runtime UID/GID

Support standard environment variables:

PUID=<uid>
PGID=<gid>

and remap the internal runtime user accordingly at container start. This is the de‑facto standard on Unraid and would immediately:

  • Allow compatibility with Unraid’s Docker integrations (including Tailscale)
  • Prevent permission churn on /app/data
  • Avoid the need for sidecar or host‑level VPN workarounds

Suggested implementation

Instead of a fixed USER may, use a revised Docker entrypoint that:

  • Reads PUID / PGID
  • Updates the runtime user/group if provided
  • Drops privileges before starting the app (e.g. via gosu or su-exec)

Why?

Unraid has a large self‑hosting user base, and many rely on:

  • Built‑in VPN tooling (Tailscale)
  • Predictable file ownership
  • Consistent behaviour across container restarts and updates

Adding PUID/PGID support would significantly improve May’s usability on Unraid without affecting other platforms.

If you're open to this I'm happy to submit a PR.

Thanks for the great project :)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions