others-How to run docker container using root user?

1. Purpose

In this post, I would demonstrate how to run docker container as root user.



2. The solution

2.1 The final solution

TL;DR, here is the final solution to this problem, Let’s say there is a docker container whose id is 58f193740e99, then we can enter the container as root user:

[root@kube-117 ~]# docker exec --user root -it 58f193740e99 sh
/ # whoami
root



2.2 How does docker map user from container to host?

In docker, each container can have a different user and group id, e.g., a specific internal user can be used to execute the program in the container instead of a user that exists on the host system. Each container can have the highest-privileged root account, but it is not in the same namespace as the host . By using an isolated user namespace, security can be improved and the processes in the container can be prevented from acquiring additional permissions; at the same time, different users can also be used to further control permissions in the container.

The best way to prevent privilege-escalation attacks from within a container is to configure your container’s applications to run as unprivileged users. For containers whose processes must run as the root user within the container, you can re-map this user to a less-privileged user on the Docker host. The mapped user is assigned a range of UIDs which function within the namespace as normal UIDs from 0 to 65536, but have no privileges on the host machine itself.

The remapping itself is handled by two files: /etc/subuid and /etc/subgid. Each file works the same, but one is concerned with the user ID range, and the other with the group ID range. Consider the following entry in /etc/subuid:

testuser:231072:65536

How to specify user in Dockerfile, here is an example:

FROM ubuntu:latest
RUN useradd -r -u 1001 -g myuser myuser
USER myuser
ENTRYPOINT [“sleep”, “infinity”]

You can see that we just created a user named myuser in group myuser in Dockerfile.

You can read more about user remapping in docker by reading this document.



2.3 What does --user xxx do in docker ?

As the official document shows, the docker exec --user format is:

--user , -u		Username or UID (format: <name|uid>[:<group|gid>])



3. Summary

In this post, I demonstrated how to switch user in docker container, the key point is to use the docker exec --user command and options to switch users . That’s it, thanks for your reading.