Изменения файлов тома не распространяются в браузере - PullRequest
0 голосов
/ 01 мая 2019

Моя проблема, как гласит заголовок, независимо от того, какие изменения я внесу в файл, браузер не отобразит его, если я не перестраиваю изображение. Я использовал sh, чтобы посмотреть, существуют ли изменения внутри контейнера, и да,они делают.

Я использую docker-compose:

version: '3.7'
services:
  postgres:
    image: postgres:alpine
    restart: always
    environment:
      POSTGRES_DB: db
      POSTGRES_USER: root
      POSTGRES_PASSWORD: pw123
  php:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    restart: always
    env_file:
      - ./app/.env
    user: 1000:1000
  nginx:
    image: nginx:1.15.3-alpine
    restart: always
    volumes:
      - ./app:/usr/src/app
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - 80:80
    depends_on:
      - php

Вот мой php-сервис dockerfile:

# ./docker/php/Dockerfile
FROM php:7-fpm-alpine

RUN apk update && apk add build-base

RUN apk add postgresql postgresql-dev \
  && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
  && docker-php-ext-install pdo pdo_pgsql pgsql

#RUN docker-php-ext-install opcache

#RUN curl -o /tmp/composer-setup.php https://getcomposer.org/installer \
#&& curl -o /tmp/composer-setup.sig https://composer.github.io/installer.sig \
# Make sure we're installing what we think we're installing!
#&& php -r "if (hash('SHA384', file_get_contents('/tmp/composer-setup.php')) !== trim(file_get_contents('/tmp/composer-setup.sig'))) { unlink('/tmp/composer-setup.php'); echo 'Invalid installer' . PHP_EOL; exit(1); }" \
#&& php /tmp/composer-setup.php --no-ansi --install-dir=/usr/local/bin --filename=composer --snapshot \
#&& rm -f /tmp/composer-setup.*

COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini

COPY app /usr/src/app

WORKDIR /usr/src/app
#install usermod
#RUN echo http://dl-2.alpinelinux.org/alpine/edge/community/ >> /etc/apk/repositories
#RUN apk --no-cache add shadow && usermod -u 1000 www-data

#RUN composer install --no-plugins --no-scripts

#ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}"

#RUN usermod -u 1000 www-data
#RUN chown -R www-data:www-data /var/cache
#RUN chown -R www-data:www-data /var/log
EXPOSE 9000
CMD ["php-fpm","--nodaemonize"]

Возможно, это не проблема с докером, поскольку у меня есть базовые знания о веб-серверах (nginx), php fpm, opcache, один из них может создать проблему, поэтому я опубликую другие файлы conf:

default.conf для nginx:

# ./docker/nginx/default.conf
server {
 server_name ~.*;

 location / {
     root /usr/src/app;

     try_files $uri /index.php$is_args$args;
 }

 location ~ ^/index\.php(/|$) {
     client_max_body_size 50m;

     fastcgi_pass php:9000;
     fastcgi_buffers 16 16k;
     fastcgi_buffer_size 32k;
     include fastcgi_params;
     fastcgi_param SCRIPT_FILENAME /usr/src/app/public/index.php;
 }

 error_log /dev/stderr debug;
 access_log /dev/stdout;
}

opcache.ini:

[opcache]
opcache.enable=1
; 0 means it will check on every request
; 0 is irrelevant if opcache.validate_timestamps=0 which is desirable in production
opcache.revalidate_freq=0
opcache.validate_timestamps=1
opcache.max_accelerated_files=10000
opcache.memory_consumption=192
opcache.max_wasted_percentage=10
opcache.interned_strings_buffer=16
opcache.fast_shutdown=1

1 Ответ

1 голос
/ 01 мая 2019

Вы отображаете том приложения на NGINX, но не отправляете файлы оттуда. Эта строка fastcgi_pass PHP:9000 в вашем файле default.conf означает, что весь трафик (правильно) перенаправляется в контейнер PHP.

Поскольку вы обслуживаете файлы из своего контейнера PHP, ваш том должен отображаться, а не копироваться (приложение COPY /usr/src/app).

Можете ли вы удалить строку (COPY ...) из Dockerfile php, а затем попробовать это docker-compose:

version: '3.7'
services:
  postgres:
    image: postgres:alpine
    restart: always
    environment:
      POSTGRES_DB: db
      POSTGRES_USER: root
      POSTGRES_PASSWORD: pw123
  php:
    build:
      context: .
      dockerfile: ./docker/php/Dockerfile
    restart: always
    env_file:
      - ./app/.env
    volumes:
      - ./app:/usr/src/app
    user: 1000:1000
  nginx:
    image: nginx:1.15.3-alpine
    restart: always
    volumes:
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    ports:
      - 80:80
    depends_on:
      - php
...