【问题标题】:Symfony cache permissions with docker with nginx rsync带有 nginx rsync 的 docker 的 Symfony 缓存权限
【发布时间】:2016-12-31 21:42:23
【问题描述】:

遵循@sveneisenschmidt 的解决方法,该解决方法利用容器中的 rsync 来加速 OSX 上的 Symfony: https://forums.docker.com/t/how-to-speed-up-shared-folders/9322/15

我似乎有 Symfony 以这种方式运行,但我遇到了 Web 服务器的权限问题,我不确定如何在 Docker 中解决。

我可以通过我的 php-fom 实例中的 CLI 清除缓存 (cache:clear --env=prod --no-debug)

但问题是当我通过 app_dev.php 查看 Symfony 时,nginx 似乎无法写入缓存/日志目录:

无法写入缓存目录(/app/app/cache/dev)

我对 rsync 如何适应权限感到困惑,但似乎 nginx 需要的权限比它拥有的更多。有关如何解决此问题的任何想法?

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

同步/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

【问题讨论】:

    标签: symfony nginx docker rsync


    【解决方案1】:

    CMD 指令允许您设置默认命令,该命令仅在您运行容器而不指定命令时才会执行。 *

    RUN 执行您在新层中提供的命令并创建新图像。**

    试试

    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/

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 2016-04-29
      • 2016-05-09
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      相关资源
      最近更新 更多