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

时间:2018-05-14 07:54:21

标签: docker docker-compose devops

version: '2'
services:
    web:
        build:
            context: ./
            dockerfile: deploy/web.docker
        volumes:
            - ./:/var/www
        ports:
            - "8080:80"
        links:
            - app

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

3 个答案:

答案 0 :(得分:8)

当从容器中的主机绑定安装目录时,文件和目录会维护它们在主机上拥有的权限。这是设计使用的:当使用绑定装载时,您将允许容器访问来自主机的现有文件,并且Docker不会对这些文件进行修改;这样做会非常危险(例如,绑定挂载主目录会改变主机主目录的文件权限,可能导致您的计算机不再可用)。

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

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:-1)

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

volumes:
        - ./:/var/www:ro //read only