【问题标题】:Docker volume and host permissionsDocker 卷和主机权限
【发布时间】:2018-12-24 23:19:18
【问题描述】:

当我运行一个 docker 镜像时,例如

docker run -v /home/n1/workspace:/root/workspace -it rust:latest bash

我在容器中创建一个目录,如

mkdir /root/workspace/test

它在我的主机上归 root 所有。这导致我每次打开容器后都必须更改权限才能使用该目录。

有没有办法告诉 Docker 在某个用户下从我的机器(主机)的角度处理目录和文件?

【问题讨论】:

    标签: docker docker-volume


    【解决方案1】:

    您需要在容器内以与在主机上相同的 uid 运行应用程序,以使文件所有权匹配。我自己的解决方案是以root身份启动容器,调整容器内用户的uid以匹配卷挂载,然后su到用户运行应用程序。这方面的脚本可以在这个 repo 中找到:https://github.com/sudo-bmitch/docker-base

    在该 repo 中,fix-perms 脚本处理容器内 uid/gid 的更改,入口点脚本有一个 exec gosu $username "$@" 以选定用户身份运行应用程序。

    【讨论】:

      【解决方案2】:

      当然,因为Docker 使用root 作为默认用户。您应该在您的 docker 容器中创建用户,切换到该用户然后创建文件夹,然后您将在您的主机上获得它们而无需 root 权限。

      Dockerfile

      FROM rust:latest
      ...
      RUN useradd -ms /bin/bash myuser
      USER myuser
      

      【讨论】:

      • 文件将具有相同的 numeric 用户 ID,无需进行 Docker 级别的重新配置;有两个不同的/etc/passwd 文件将其映射回用户名。这会导致“我的文件在容器内归 www-data 所有,但在主机上归 ntpd 所有”问题。
      猜你喜欢
      • 2021-05-12
      • 2017-06-30
      • 2020-01-07
      • 2015-05-22
      • 2019-05-08
      • 1970-01-01
      • 2020-04-27
      • 2021-01-04
      • 2020-08-07
      相关资源
      最近更新 更多