How to set user of Docker container


When you run a Docker container using docker run, everything inside the container is executed by the root user and root group. Its UID is 0 and GID is 0. This can sometimes be a problem.

For example, I had mounted a directory from the host filesystem into the Docker container using the --volume option. When root creates a new file or directory in this mounted directory, it appears as owned by the user nobody and group nogroup. This was a problem since I wanted these new files and directories to be created with my username or at least my group.


You can set what username or group you want to run as inside a container by using the --user option.

  • To run as user joe: --user joe. It is highly unlikely that the username joe exists in the Docker container. So this will likely fail unless you have added Dockerfile commands to make this so.

  • Instead, set the UID: --user 1005. Docker will warn that the UID does not have a corresponding username inside the container, but it will work. Files created on the mounted directory will have the UID 1005. There is a problem: many programs inside the container may not run if root is not running it. For example, you may find that you cannot create files or directories inside the container without being root.

  • Another option is to set the group or GID: --user :1005. Notice the colon. Files created on mounted volumes will have the group GID you set. This solution worked to solve my problem.

  • You can set both UID and GID too: --user 1005:9999

Tried with: Ubuntu 16.04


How to change UID and GID

You may sometimes want to change the UID (user ID) and GID (group ID) of your username. This can be done easily in Linux in two steps: change the ID and then change the file owner of all files with the old IDs.

Change UID

For example, to change UID of joe from 1000 to 9000:

$ sudo usermod -u 9000 joe
$ sudo find / -user 1000 -exec chown -h 9000 {} \;

Change GID

For example, to change GID of joe from 2000 to 8000:

$ sudo groupmod -g 8000 joe
$ sudo find / -group 2000 -exec chgrp -h 8000 {} \;
$ sudo usermod -g 8000 joe

If you get any errors, please remember to logout of your desktop and kill any processes that are holding on to your username. It is best to just run these commands from a virtual terminal like Ctrl + Alt + F1.

Tried with: Ubuntu 16.04