【问题标题】:Docker container volume has root only accessDocker 容器卷具有 root 权限
【发布时间】:2017-11-02 22:51:18
【问题描述】:

我正在尝试以非 root 用户身份启动容器。正在生成的卷只有 root 访问权限。容器的非root用户无法写入容器的卷目录。

docker-compose.yml

  volumes:
       - ./trm/workspace:/opt/kad/translation/workspace

Dockerfile:

RUN chown -R nonrootuser /opt/kad/translation/workspace
VOLUME /opt/kad/translation-resource-monitor/workspace

有什么方法可以创建对非 root 用户具有写入权限的卷。

【问题讨论】:

  • 显示 Dockerfile

标签: docker docker-compose dockerfile docker-volume


【解决方案1】:

卷不是生成的,而是使用主机权限安装的。 Dockerfile 指令也在运行容器之前的镜像构建上执行。在您的情况下,nonrootuser 用户拥有的 /opt/kad/translation/workspace 目录将被替换为 ./trm/workspace 在容器启动时由与主机上相同的 uid/gid 拥有。因此在运行容器之前需要确保主机文件夹具有正确的权限,例如。克:

chown -R uid_of_nonrootuser_in_container:gid_of_nonrootuser_in_container \
  ./trm/workspace && docker-compose up -d

请注意,主机和容器中有不同的用户,因此您应该使用容器用户的 uid 和 gid,而不是用户名和组名。在容器中查找 uid 和 gid 运行 id nonrootuser

另一个解决方案(正如 Manish Joshi 指出的那样)是使目录对所有用户都可写:

chmod -R 0777 ./trm/workspace

但它使您对文件夹安全性的控制较少。

【讨论】:

  • 这可能会给这个过程的自动化带来麻烦......它在某种程度上也会使其不可移植。如果您可以将主机中的目录挂载到容器中,这将更容易,该容器可以被授予对其他人的读+写+执行访问权限,或者可以说是 777 权限。
  • 谢谢@dizeee,帮助了。
猜你喜欢
  • 1970-01-01
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2017-10-04
相关资源
最近更新 更多