chmod在Docker中不能正常工作

我正在为我的Symfony应用程序构build一个Docker镜像,我需要授予Apache服务器写入caching和日志文件夹

 #Dockerfile FROM php:7-apache RUN apt-get update \ && apt-get install -y libicu-dev freetds-common freetds-bin unixodbc \ && docker-php-ext-install intl mbstring \ && a2enmod rewrite COPY app/php.ini /usr/local/etc/php/ COPY app/apache2.conf /etc/apache2/apache2.conf COPY ./ /var/www/html RUN find /var/www/html/ -type d -exec chmod 755 {} \; RUN find /var/www/html/ -type f -exec chmod 644 {} \; RUN chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs 

当我用docker build -t myname/symfony_apps:latest .创build这个镜像时docker build -t myname/symfony_apps:latest . 并用docker run -p 8080:80 myname/symfony_apps:latest运行容器。 Apache日志被许可拒绝错误淹没,奇怪的事情,我已经与ls -a检查和权限是好的。 当我从容器的bash运行chmod时,apache权限问题消失了,应用程序运行良好

情况

从dockerfile运行chmod命令:权限被更改,但是apache仍然抱怨权限被拒绝。 在容器中使用bash运行chmod相同的命令:权限被改变,我的应用程序正在运行

任何想法,我错过了什么,也许我应该在Dockerfile的某处添加root用户?

我有同样的问题,似乎在docker或overlay2有一些错误,如果目录内容是在一个层中创build的,并且其权限在其他更改。

作为一种解决方法,您可以将源复制到临时目录中:

 COPY . /src 

然后将其移动到/var/www/html并设置权限(在一个RUN命令中):

 RUN rm -rf /var/www/html && mv /src /var/www/html &&\ find /var/www/html/ -type d -exec chmod 755 {} \; &&\ find /var/www/html/ -type f -exec chmod 644 {} \; &&\ chmod -R 777 /var/www/html/app/cache /var/www/html/app/logs 

另外我创build了GitHub问题 。