我安装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。
你有什么想法来解决我的问题吗?
祝你好运
答案 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设置权限(上传文件,缓存,...),但主机用户需要访问这些文件。