有没有办法以非root用户的身份挂载命名卷?我试图避免在每个Dockerfile中运行chown
,但我需要将挂载点写成可被非root用户写入以便能够在镜像中编写构建生成的工件。
这是我正在尝试的:
docker run --rm -it -v /home/bob/dev/:/src/dev -v builds:/mnt/build --name build hilikus/build /bin/bash
但对于第二座山,我得到了:
[user@42f237282128 ~]$ ll /mnt
total 4
drwxr-xr-x 2 root root 4096 Sep 18 19:29 build
我的另一个挂载点(/src/dev/
)归用户所有,而不是根用户,因此它提供了我所需的内容;但是,我无法使用命名卷做同样的事情。
VOLUME /data
。当我像你展示的那样运行docker run
命令时,所有东西都回到了root
所有权下(需要注意的是我的卷在开始时是空的,所以我只更改了卷文件夹的所有权)。 - HuygensDockerfile
文档中的说明,它指出:“如果任何构建步骤在声明卷后更改卷内的数据,则这些更改将被丢弃。” 我刚好就犯了这个错误!VOLUME指令是在我创建文件夹并设置权限之前,所以它被简单地丢弃了。 - Huygensdocker run
中提供卷,它也会保留数据(并且人们可以理解命名卷是自动创建的);包装器可以通过简单地检查镜像来自动建议用户创建卷(无需文档)。但是,如果您提供了良好的文档,则这两个点就不那么重要,可以视为可选项。所有这些都是告诉您,是的,我同意您的最佳实践,它带来了更多优势(或减少了头痛)。 - Huygens