以下内容适用于docker未使用的user namespace的情况
linux系统中的uid和gid是由内核负责管理的,而且内核管理是使用的是id不是name。同一台宿主机中运行的不同的docker和宿主机共享同一个内核,所以所有的docker中的uid和gid的管理和宿主机也都是一致的。即docker中的uid为1000的用户和宿主机中uid为1000的用户实质上是同一个用户。默认情况下docker启动时,都是采用的root账号,相当于容器中的应用对宿主机有完全的控制权限,这种做法时不安全的,所以需要对容器运行时指定一个具有合适权限的用户。
不同docker之间以及docker和宿主机中同一个uid可能对应不同的的用户名称,这是因为uid到用户名的解析(用户态程序)不同而已。
指定docker运行使用的用户
Dockerfile中使用USER命令指定
下面是jenkins的dockerfile中关于USER使用的节选
1 | # ...... |
docker run
命令行参数中指定用户
1 | docker run -d --user 1000 ubuntu sleep infinity |