Understanding PUID and PGID

We use environment variables called PUID and PGID in order for the applications running inside our containers to run under the correct user scope.

Why use these?

Docker runs all of its containers under the root user domain because it requires access to things like network configuration, process management, and your filesystem. This means that the processes running inside your containers also run as root. This kind of elevated access is not ideal for day-to-day use, and potentially gives applications the access to things they shouldn't (although, a strong understanding of volume and port mapping will help with this).

Another issue is file management within the container's mapped volumes. If the process is running under root, all files and directories created during the container's lifespan will be owned by root, thus becoming inaccessible by you.

Using the PUID and PGID allows our containers to map the container's internal user to a user on the host machine. All of our containers use this method of user mapping and should be applied accordingly.

Using the variables

When creating a container from one of our images, ensure you use the -e PUID and -e PGID options in your docker command:

docker create --name=beets -e PUID=1000 -e PGID=1000 linuxserver/beets

Or, if you use docker-compose, add them to the environment: section:

environment:
  PUID: 1000
  PGID: 1000

It is most likely that you will use the id of yourself, which can be obtained by running the command below. The two values you will be interested in are the uid and gid.

id $user