Есть похожие вопросы в 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 изменение, которое вам может понадобиться:
- Удаление любых привязок тома для приложениякод, так что код остается внутри контейнера и не может быть изменен извне
Факты:
- Внутри контейнера журнала nginx регистрируется 404 обращения, но ошибок нет.
- Внутри контейнера php-symfony в журналах продуктов отображаются такие строки, как
request.ERROR: Uncaught .... NotFoundException for "GET /css/main.css" at ...RouterListener.php {"exception": ".../NotFoundHttpException(code: 0) ... ResourceNotFoundException"} []
- Проверка dev в браузере
http://<host>:<port>/app_dev.php/css/main.css
nginx return 404. (Я сделал среду dev доступной извне) - Проверка dev в браузере на наличие маршрута, например
http://<host>:<port>/app_dev.php/css
появляется страница исключения Symfony Не найдено ни одного маршрута для "GET / css" с той же информацией ResourceNotFoundException > NotFoundHttpException
- Изменениеправа доступа к папке
web
в контейнере 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;
}
}