我一直在玩Docker一段时间,并在处理持久数据时继续寻找相同的问题.
创建我Dockerfile和暴露量或使用--volumes-from来安装我的容器内的主文件夹.
我应该对主机上的共享卷应用哪些权限?
我可以想到两个选择:
到目前为止,我已经给了每个人读/写访问权限,所以我可以从Docker容器写入该文件夹.
将用户从主机映射到容器,这样我就可以分配更细化的权限.不确定这是可能的,但没有找到太多关于它.到目前为止,我所能做的就是以某个用户身份运行容器:docker run -i -t -user="myuser" postgres但是此用户的UID与我的主机不同myuser,因此权限不起作用.此外,我不确定映射用户是否会带来一些安全风险.
还有其他选择吗?
你们这些人/女士如何应对这个问题?
考虑以下简单的Dockerfile:
FROM debian:testing
RUN adduser --disabled-password --gecos '' docker
RUN adduser --disabled-password --gecos '' bob
Run Code Online (Sandbox Code Playgroud)
在一个没有别的工作目录.构建docker镜像:
docker build -t test .
Run Code Online (Sandbox Code Playgroud)
然后在容器上运行bash脚本,将工作目录链接到bob主目录中的新子目录:
docker run --rm -it -v $(pwd):/home/bob/subdir test
Run Code Online (Sandbox Code Playgroud)
谁拥有subdir容器上的内容?在容器上,运行:
cd /home/bob/subdir
ls -l
Run Code Online (Sandbox Code Playgroud)
广告我们看到:
-rw-rw-r-- 1 docker docker 120 Oct 22 03:47 Dockerfile
Run Code Online (Sandbox Code Playgroud)
圣烟!docker拥有内容!回到容器外的主机上,我们看到我们的原始用户仍然拥有Dockerfile.让我们尝试修复bob主目录的所有权.在容器上,运行:
chown -R bob:bob /home/bob
ls -l
Run Code Online (Sandbox Code Playgroud)
我们看到:
-rw-rw-r-- 1 bob bob 120 Oct 22 03:47 Dockerfile
Run Code Online (Sandbox Code Playgroud)
可是等等!在容器外面,我们现在运行ls -l
-rw-rw-r-- 1 1001 1001 120 Oct 21 20:47 …Run Code Online (Sandbox Code Playgroud)