В SO есть похожие вопросы, но не для этой конкретной проблемы.
Инструменты: docker-compose 1.21.2; symfony 3.4; nginx 1.10.3
У меня есть несколько несвязанных контейнеров («У каждого контейнера должно быть только одно беспокойство»). Все работает, кроме получения ресурсов приложения symfony (3.4) в браузере. Определенные маршруты работают, шаблоны отображаются правильно, проблема только в активах. Помимо использования той же настройки, но локального обслуживания на машине разработчика (без контейнеров), проблем нет.
С томами это сработало, но я хочу, чтобы они были в производстве, так как в документации указано https://docs.docker.com/compose/production/#modify-your-compose-file-for-production, изменение, которое вам может понадобиться:
Факты:
request.ERROR: Uncaught .... NotFoundException for "GET /css/main.css" at ...RouterListener.php {"exception": ".../NotFoundHttpException(code: 0) ... ResourceNotFoundException"} []http://<host>:<port>/app_dev.php/css/main.css nginx возвращает 404. (Я сделал среду разработки доступной извне)http://<host>:<port>/app_dev.php/css появляется страница исключений Symfony Не найдено ни одного маршрута для "GET / css" с той же информацией ResourceNotFoundException > NotFoundHttpExceptionweb в контейнере chmod -R a+rwx .../web не имеет значения.Соответствующий раздел docker-compose.yml
version: "2"
services:
site:
...
working_dir:
/var/www/html/site
site_webserver:
...
ports:
- <port>:80
depends_on:
- site
links:
- site
Соответствующий раздел nginx.conf
server {
listen 80;
server_name "";
root /var/www/html/site/web;
location / {
try_files $uri /app.php$is_args$args;
}
location ~ ^.*/(app_dev|config)\.php(/|$) {
fastcgi_pass lockate_site:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $document_root;
}
}






у вас должен быть существующий файл /var/www/html/site/web/css/main.css! У тебя есть это?
Конфигурация Nginx не должна передавать этот запрос /css/main.css в PHP-код. Он должен просто отправить существующий файл в браузер. Думаю, у вас есть этот файл, но по другому пути.
Вы должны исправить для него конфигурацию nginx или поместить файлы ресурсов в каталог / var / www / html / site / web /.
Да, файл существует, «обслуживая локально на машине разработчика (без контейнеров), проблем нет.»; Зачем монтировать каталог ресурсов? (Удаление любых привязок томов для кода приложения, чтобы код оставался внутри контейнера и его нельзя было изменить извне docs.docker.com/compose/production/…)
Можно сказать гораздо больше, но: активы были заблокированы в контейнере php-fpm (symfony).
В файле контейнера www.conf (в моем случае /usr/local/etc/php-fpm.d/www.conf) проверьте директиву security.limit_extensions и оставьте так
security.limit_extensions =
Примечание: я обнаружил, что это прокомментировано следующим образом: ;security.limit_extensions = .php .php3 .php4 .php5
Ваша основная проблема в том, что nginx ищет файлы ресурсов в контейнере nginx. После установки ваших ресурсов с помощью (app / console assets: install) они будут скопированы в ваш контейнер php (symfony). Вы должны связать активы между контейнерами. На это есть ответ: https://stackoverflow.com/a/44284993/6279901
Ой! Может быть, вы забыли смонтировать каталог ресурсов в контейнер nginx?