运行docker容器与我自己的特权

我试图在Docker容器中包含一个复杂的应用程序的依赖关系,但让它在我自己的文件上运行,而不会在最后冲突的UID。 实质上,我想运行如下的东西:

docker run \ --rm \ --volume $HOME/playbook:/playbook --workdir /playbook \ --user $(id --user) \ container_image 

但是,这是因为应用程序期望提供的UID对应于一个用户名:

 getpwuid(): uid not found: 1000 

我最终把这个在Dockerfile

 RUN \ for uid in seq 1000 1010; do \ adduser --home /tmp/user_$uid --uid $uid user_$uid; \ done 

有更好的解决scheme吗?

为便于使用,可以将/ etc / passwd和/ etc / group文件作为只读文件挂载到容器中:

 docker run \ --rm \ --volume $HOME/playbook:/playbook --workdir /playbook \ --user $(id --user) \ --volume /etc/passwd:/etc/passwd:ro \ --volume /etc/group:/etc/group:ro \ container_image 

如果容器需要定义自己的用户名,则两个缺点是可能的,并且来自映像的文件权限可能具有错误的或缺失的用户/组定义。