【问题标题】:How to manage volume's rights如何管理卷的权限
【发布时间】:2018-09-06 20:56:07
【问题描述】:

我正在使用 Docker 运行后台服务分析我的 dev 目录。我在我的容器上使用docker run -v /host/project:/media/analysis:rw 来运行它。

但是,这个命令会导致一个问题,这个卷中的文件属于 UID 1000(根),而我想用我的服务打开它。我正在使用chown user:user -R /media/analysis,但是这需要从 docker 容器运行命令,并且我想避免用户在运行容器后执行命令。

第二个问题是,即使我使用runcommand 运行脚本,因为它是一个开发者目录,肯定会添加新文件,我发现在主机上创建新文件被视为“root” " Docker 的文件,这意味着我还需要在服务处理时更新卷权限。

问候, 沃尔多

更新:

我想了另一种方法来解决我的问题,它有效,但作为一个初学者,我想知道是否有合适的方法来做到这一点。

在我的 Dockerfile 中,我添加了一个 ENTRYPOINT script.sh,其内容如下:

#!/bin/bash
olduser=$(id -u sonarqube)
oldgroup=$(id -g sonarqube)

usermod -u ${USER_ID} sonarqube \;
groupmod -g ${GROUP_ID} sonarqube ;

find / -group ${oldgroup} -exec chgrp -h sonarqube {} \;
find / -user ${olduser} -exec chown -h sonarqube {} \;

然后,我使用以下命令来运行我的容器:

docker run -v /project:/analysis:rw -e USER_ID=$(id -u) GROUP_ID=$(id -g) image

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    您可以从 Dockerfile 设置拥有用户/组。

    RUN mkdir -p /somedir && chown -R someone:someone /somedir
    VOLUME ["/somedir"]
    

    还有其他方法可以做到这一点,所以可以阅读;)https://github.com/moby/moby/issues/2259

    【讨论】:

    • 如果我这样做了,我仍然无法让非 root 用户获得对我的 hosts 文件的读/写权限,不是吗?
    • 在新卷上,初始所有者是目录的所有者,但如果您使用现有卷,则使用现有卷的权限。
    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多