$docker.recipes
·9 min read·Updated February 2026

Why LinuxServer.io Images Are the Gold Standard for Self-Hosting

What makes LinuxServer.io Docker images special, how to use PUID/PGID, and why they should be your first choice for self-hosted services.

linuxserverdockerself-hostingbest-practices

01Not All Docker Images Are Created Equal

When you search Docker Hub for a service like Sonarr, you'll find the official image, the LinuxServer.io image, and dozens of community-built alternatives. Early in my self-hosting journey, I picked images randomly. After dealing with permission nightmares, inconsistent update schedules, and images that silently stopped being maintained, I learned to look for the LinuxServer.io version first. LinuxServer.io (often abbreviated LSIO) is a volunteer team that maintains over 200 Docker images with a consistent interface, regular updates, and a focus on the self-hosting community. Their images solve problems you didn't know you had.

02What Makes LSIO Images Different

Every LSIO image follows the same conventions: PUID/PGID: Set the user and group IDs the container runs as via environment variables. This eliminates the permission problems that plague Docker volumes. If your host user has UID 1000, set PUID=1000 and all files created by the container are owned by your user. TZ: Set the timezone via the TZ environment variable. Consistent log timestamps across all services. S6-overlay: LSIO images use the s6 init system, which properly handles process supervision, signal forwarding, and graceful shutdown. This matters more than you'd think — containers that don't handle SIGTERM correctly can lose data on restart. Consistent paths: Configuration always lives in /config. This makes backup scripts simple — just back up the /config volume for every LSIO container. Regular updates: The team rebuilds images weekly with the latest upstream versions and security patches. Their CI pipeline automatically tests every build.

03Using LSIO Images

Here's a typical LSIO container configuration:
[docker-compose.yml]
1services:
2 sonarr:
3 image: lscr.io/linuxserver/sonarr:latest
4 container_name: sonarr
5 restart: unless-stopped
6 environment:
7 - PUID=1000 # Your user's UID (run 'id' to check)
8 - PGID=1000 # Your user's GID
9 - TZ=America/New_York
10 volumes:
11 - sonarr_config:/config
12 - /path/to/tv:/tv
13 - /path/to/downloads:/downloads
14 ports:
15 - "8989:8989"
16
17 jellyfin:
18 image: lscr.io/linuxserver/jellyfin:latest
19 container_name: jellyfin
20 restart: unless-stopped
21 environment:
22 - PUID=1000
23 - PGID=1000
24 - TZ=America/New_York
25 volumes:
26 - jellyfin_config:/config
27 - /path/to/media:/media
28 ports:
29 - "8096:8096"
30
31volumes:
32 sonarr_config:
33 jellyfin_config:

Run 'id' on your host to find your UID and GID. On most single-user Linux systems, both are 1000. Setting PUID/PGID to match means you can access container-created files directly from the host without permission issues.

04When to Use LSIO Images

My rule of thumb: if LinuxServer.io maintains an image for the service I want to deploy, I use it over the official image. The consistency, the PUID/PGID support, and the reliable update schedule make them the best choice for self-hosting. The exceptions: if the official image is actively maintained by the project developers and has features the LSIO image lacks, or if you need a specific version that LSIO hasn't built yet. Browse lscr.io or the LinuxServer.io fleet list to see all available images. Many of our recipes on docker.recipes offer both official and LSIO image options — check the media and homelab categories especially.

About the Author

Frank Pegasus

DevOps engineer and self-hosting enthusiast with over a decade of experience running containerized workloads in production. Creator of docker.recipes.