Docker错误的权限apache2

时间:2016-10-10 09:59:58

标签: apache symfony docker-compose

我安装docker时遇到问题。当我启动docker-compose时,我有这个错误:

front_1 | /var/lock/apache2 already exists but is not a directory owned by www-data.
front_1 | Please fix manually. Aborting.

我有这个错误,因为我在dockerfile conf中添加了这一行:

RUN usermod -u 1000 www-data

但是如果我删除这一行,我的symfony项目就无法使用docker。

你有什么想法来解决我的问题吗?

祝你好运

1 个答案:

答案 0 :(得分:0)

正如我所看到的,您正在尝试将docker中用户www-data的UID更改为与主机用户UID(您)具有相同的ID,因此您可以在IDE中打开项目文件。

这会在apache2服务上引入文件权限问题,因为它不能读取它自己的文件(config,pid,...),因为它不再是同一个用户了。 /强>

快速'脏'解决方案是仅将symfony项目文件的所有者更改为UID 1000,但将组(GID)保留为www-data。这仅适用于开发机器。否则你不需要它。在容器内运行命令。

chown -R 1000:www-data /home/project

你可以在docker中创建一些bash别名来掌握它。

其他选项是使用ACL,它将设置具有权限的现有文件和文件夹,这将继承到给定文件夹下新创建的文件。这可以放在容器内的bootstrap脚本中。但仅适用于DEV模式。这样你就不需要运行chown。

chown -R 1000:www-data /home/project #set for existing files
/usr/bin/setfacl -R -m u:www-data:rwx -m u:0:rwx -m u:1000:rwx /home/project
/usr/bin/setfacl -dR -m u:www-data:rwx -m u:0:rwx -m u:1000:rwx /home/project

每个 -m 适用于其他用户。首先是www-data(apache2),第二个是0(root),第三个是1000(你)。

记住UID可以随时更改。因此,如果提到的用户没有正确的UID,这可能会造成安全漏洞。 我只使用第二种方法用于文件夹,其中PHP通过apache2设置权限(上传文件,缓存,...),但主机用户需要访问这些文件。