为了更好地理解如何使用--uidmap
with ctr
,我通过以下步骤创建了一个测试容器。containerd
版本1.4.3
是.
构建并运行容器:
- 构建 Dockerfile
和$ cat Dockerfile FROM alpine ENTRYPOINT ["/bin/sh"]
$ docker build -t test . Sending build context to Docker daemon 143.1MB Step 1/2 : FROM alpine ---> d6e46aa2470d Step 2/2 : ENTRYPOINT ["/bin/sh"] ---> Running in 560b09f9b287 Removing intermediate container 560b09f9b287 ---> 8506bfeab109 Successfully built 8506bfeab109 Successfully tagged test:latest
- 将图像保存为 tar 球
$ docker save test > test.tar
- 使用 containerd 导入它
ctr
$ sudo ctr i import test.tar unpacking docker.io/library/test:latest (sha256:9f7dabf0e4feadbca9bdc180422a3f2cdd7b545445180a3c23de8129dc95f29b)...done
- 创建并运行容器
uid 映射应该将容器内部 uid 0(root)映射到 5000,对应于 ctr 的手册页:$ sudo ctr run --uidmap 0:5000:4999 docker.io/library/test:latest test
--uidmap="":在指定UID映射范围的用户命名空间内运行;使用格式指定 container-uid:host-uid:length
检查容器和主机上的 UID:
容器内:
ps -eo ruser,rgroup,comm
RUSER RGROUP COMMAND
root root sh
root root ps
在主机上:
$ ps -eo uid,gid,cmd | grep /bin/sh
126 128 /bin/sh /usr/lib/lightdm/lightdm-greeter-session /usr/sbin/unity-greeter
0 0 /bin/sh
问题
它似乎不起作用,/bin/sh
在容器内以及主机上以 root (uid=0) 身份运行。