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?
答案 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