Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Symfony cache permissions with docker with nginx rsync

Following @sveneisenschmidt's workaround which utilizes rsync in a container to speed up Symfony on OSX: https://forums.docker.com/t/how-to-speed-up-shared-folders/9322/15

I seem to have Symfony running this way, but I'm running into permissions issues with the web server that I'm not sure how to resolve in Docker.

I'm able to clear the cache via the CLI in my php-fom instance (cache:clear --env=prod --no-debug)

But the problem is when I view Symfony via app_dev.php, nginx cannot seem to write to the cache/logs directories:

Unable to write in the cache directory (/app/app/cache/dev)

I'm confused about how rsync fits into the permissions, but it seems that nginx needs more permissions than it has. Any ideas on how to resolve this?

docker_compose.yml

# Web server
nginx:
  container_name: insight_nginx
  build: docker/nginx
  ports:
    - "80:80"
  links:
    - php
    - sync:sync
  volumes_from:
    - sync

# Data alias
data:
  container_name: insight_data
  build: docker/data/.

# Database
db:
  container_name: insight_db
  build: docker/db
  ports:
      - 3306:3306
  volumes:
    - "./.data/db:/var/lib/mysql"
    - ./db-dump:/docker-entrypoint-initdb.d
  environment:
      MYSQL_ROOT_PASSWORD: root

# Application server
php:
  container_name: insight_php
  build: docker/php-fpm
  external_links:
    - insight_db:docker-mysql
  environment:
      DB_HOST: docker-mysql
  # Syncing
  volumes_from:
    - sync
  links:
    - sync:sync

# Synchronization
### Symfony rsync workaround from here: https://forums.docker.com/t/how-to-speed-up-shared-folders/9322/15
sync:
    container_name: insight_sync
    build: docker/sync
    command: "lsyncd -delay 1 -nodaemon -rsync /src /app"
    volumes:
        - /app
        - "./:/src"
    working_dir: /src
    stdin_open: true
    tty: true

nginx/Dockerfile

FROM nginx:latest

COPY symfony3.conf /etc/nginx/conf.d/symfony3.conf

#RUN usermod -u 1000 www-data
#RUN chown -R www-data:www-data /app/cache
#RUN chown -R www-data:www-data /app/logs

php-fpm/Dockerfile

FROM pvlltvk/ubuntu-trusty-php-fpm-5.6

RUN apt-get install -y \
    php5-curl \
    php5-sybase \
    freetds-dev \
    libxml2-dev

ADD freetds.conf /etc/freetds/freetds.conf

RUN echo 'alias sf="php /app/app/console"' >> ~/.bashrc

#RUN chmod -R 0777 /tmp/symfony/logs
#RUN chmod -R 0777 /tmp/symfony/cache

#ADD start.sh /start.sh
#RUN chmod +x /start.sh

WORKDIR /app

sync/Dockerfile

FROM ubuntu:16.04

RUN PACKAGES="\
        rsync \
        lsyncd \
    " && \
    apt-get update && \
    apt-get install -y $PACKAGES && \
    apt-get autoremove --purge -y && \
    rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

#RUN rm -rf /src/app/cache/* \
#   rm -rf /src/app/logs/* \
#   sudo chmod +R 777 /src/app/cache /src/app/logs

#RUN chmod -R 0777 ./app/logs
#RUN chmod -R 0777 ./app/cache
like image 891
Dominick Avatar asked Dec 07 '25 06:12

Dominick


1 Answers

CMD instruction allows you to set a default command, which will be executed only when you run container without specifying a command. *

RUN executes the command(s) that you give in a new layer and creates a new image.**

try

CMD chown -R www-data:www-data /var/www && nginx

*http://goinbigdata.com/docker-run-vs-cmd-vs-entrypoint/

**https://til.codes/docker-run-vs-cmd-vs-entrypoint/

like image 112
mst Avatar answered Dec 09 '25 19:12

mst