如何更改docker-compose.yml中docker-compose.yml中已装载卷的权限?

not*_*eek 9 docker docker-compose devops

version: '2'
services:
    web:
        build:
            context: ./
            dockerfile: deploy/web.docker
        volumes:
            - ./:/var/www
        ports:
            - "8080:80"
        links:
            - app
Run Code Online (Sandbox Code Playgroud)

chmod何时自动更改权限()/ var / www docker-compose up -d --build

tha*_*tah 11

从容器中的主机绑定挂载目录时,文件和目录将保留它们在主机上的权限。这是设计使然:使用绑定安装时,您使容器可以从主机访问现有文件,而Docker不会对这些文件进行修改。这样做将非常危险(例如,将主目录绑定安装会更改主机的主目录的文件权限,这可能导致您的计算机不再可用)。

要更改这些文件的权限,请更改其在主机上的权限。

您可以在我在StackOverflow上发布的另一个答案中找到有关此问题的更多信息:https ://stackoverflow.com/a/29251160/1811501

  • 伙计...这正是 Docker 目前正在对我做的事情...它更改了权限,并且路径只能由 root 或 docker 容器用户访问...其余的应用程序无法再使用该目录。我正在寻找一种设置权限的方法,以便我可以在更改权限之前将权限设置回我想要的权限...这非常烦人并且会破坏东西! (4认同)

Edw*_*win 8

您可以在额外的列之后添加权限,例如:

volumes:
        - ./:/var/www:ro //read only
Run Code Online (Sandbox Code Playgroud)

  • 假设我想获得 777 或 750 之类的许可,“ro”会是什么? (4认同)
  • 等一下,您要更改挂载卷的文件和文件夹的权限吗?我错过了你的问题,因为你只能在主机上做 (4认同)
  • 看看这个 https://en.wikipedia.org/wiki/Chmod,尤其是@Numerical 权限 (2认同)
  • 这将安装一个只读文件系统,这与更改权限不太一样。它不会影响 chmod 设置的标志 (2认同)

Mih*_*anu 8

实际上这有点复杂,需要更好的清晰度。

如果我们将主机文件夹folder_a挂载到来宾文件夹folder_b并且folder_b已经创建,在创建容器映像(Dockerfile)时“chown”-ed和“chmod”-ed,则从来宾角度来看folder_b定义的权限必须优先。这就是我的盒子上发生的情况。由于来宾用户不应该存在于主机中,因此“向主机添加权限”之类的答案不是很漂亮,这意味着“向每个人授予写入权限”。

如果folder_b尚未“准备”预先安装,但它是“即时”安装的;我还没有找到任何方法来根据上下文更改权限。尝试大声推理:主机上的 docker 守护进程对来宾用户一无所知。我也很好奇,作为 docker 的演变,带有来宾名称的 chmod/chown 在技术上是否可行。我最初的期望是,动态安装继承了父文件夹权限(如果 /mnt/a 由 app_user 所有,则安装在 /mnt/a/myMount 中也会保留 app_user 对子文件夹的所有权,但是,新的在我的测试中,已安装的文件夹由 root 拥有)

从安全角度来看,操作挂载的来宾永远不应该将自己的安全/敏感文件夹挂载到来宾上。通常假设,如果您将卷提供给来宾,则来宾必须能够对其执行任何操作。然而,“动态”安装会在来宾内部生成一个“root”拥有的文件夹,因为 root 是来宾和主机都知道的唯一用户。