linux – 在特定的用户命名空间配置中运行每个Docker容器
问题:
我试图以这种方式挂载目录作为Docker卷, 本质上,我需要将用户UID从容器用户命名空间重新映射到主机用户命名空间上的特定UID. 我怎样才能做到这一点? 我更喜欢以下答案: >不要涉及改变Docker守护进程的运行方式; 建立: 这就是情况的复制方式. 我有我的Linux用户lape,分配给docker组,所以我 lape@localhost ~ $id uid=1000(lape) gid=1000(lape) groups=1000(lape),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),121(lpadmin),131(sambashare),999(docker) Dockerfile: FROM alpine RUN apk add --update su-exec && rm -rf /var/cache/apk/* # I create a user inside the image which i want to be mapped to my `lape` RUN adduser -D -u 800 -g 801 insider VOLUME /data COPY ./entrypoint.sh /entrypoint.sh ENTRYPOINT ["sh","/entrypoint.sh"] entrypoint.sh: #!/bin/sh chmod 755 /data chown insider:insider /data # This will run as `insider`,and will touch a file to the shared volume # (the name of the file will be current timestamp) su-exec insider:insider sh -c 'touch /data/$(date +%s)' # Show permissions of created files ls -las /data 一旦构建: docker build -t nstest 我运行容器: docker run --rm -v $(pwd)/data:/data nstest 输出如下: total 8 4 drwxr-xr-x 2 insider insider 4096 Aug 26 08:44 . 4 drwxr-xr-x 31 root root 4096 Aug 26 08:44 .. 0 -rw-r--r-- 1 insider insider 0 Aug 26 08:44 1503737079 所以该文件似乎是作为用户内幕创建的. 从我的主机,权限看起来像这样: lape@localhost ~ $ls -las ./data total 8 4 drwxr-xr-x 2 800 800 4096 Aug 26 09:44 . 4 drwxrwxr-x 3 lape lape 4096 Aug 26 09:43 .. 0 -rw-r--r-- 1 800 800 0 Aug 26 09:44 1503737079 这表明该文件属于uid = 800(即内部用户甚至不存在于Docker命名空间之外). 我尝试过的事情: >我尝试将–user参数指定为docker run,但似乎它只能映射主机上的哪个用户映射到docker命名空间内的uid = 0(root),在我的情况下,内部人员不是root.所以它在这种情况下并没有真正起作用. >它需要重新配置Docker守护程序的运行方式; 解决方法
如果您只需要为用户提供读取权限,最简单的方法是使用docker之外的acls为/ data中的所有文件和子目录添加读取权限.
添加默认acl:setfacl -d -m u:lape:-rx / data. 您还需要访问目录本身:setfacl -m u:lape:-rx / data. 这种解决方案有什么障碍吗? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |