Wednesday, October 8, 2014

permissions - chmod not working correctly in Docker



I'm building a Docker image for my Symfony app and I need to give permission to apache server to write into cache and log folders



#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


When I build this image with docker build -t myname/symfony_apps:latest . and run the container with docker run -p 8080:80 myname/symfony_apps:latest.
Apache log is flooded by permission denied errors , the strange thing that I've checked with ls -a and permissions are fine. and when I run chmod from container's bash , apache permission issues are gone and the app works well



The situation




Running chmod commands from dockerfile: permissions are changed but apache still complains about permission denied.
Running chmod same commands with bash inside the container: permissions are changed and my app is running



Any idea , Am I missing something, maybe I should add root user somewhere in the Dockerfile ?


Answer



I had the same issue and it seems that there is some bug in docker or overlay2 if directory content is created in one layer and its permissions are changed in other.



As a workaround you could copy sources to temporary directory:




COPY . /src


And then move it to /var/www/html and setup permissions (in one RUN command):



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



Also I created GitHub issue.


No comments:

Post a Comment

linux - How to SSH to ec2 instance in VPC private subnet via NAT server

I have created a VPC in aws with a public subnet and a private subnet. The private subnet does not have direct access to external network. S...