2016-07-25 5 views
2

Я пытаюсь создать образ Docker для запуска своего приложения Symfony3.Конфигурация докеры Symfony

У меня есть docker-composer.yml и site.conf

В моем Докере-композиторе я определяю два контейнера web и php и связать этот cntainers:

web: 
    image: nginx:latest 
    ports: 
     - "80:80" 
    volumes: 
     - ./code/test:/var/www/test 
     - ./site.conf:/etc/nginx/conf.d/default.conf 
    links: 
     - php 
php: 
    image: php:7-fpm 
    volumes: 
     - ./code/test:/var/www/test 

Я нашел OFFICAL Nginx docs о том, как создать свой сайт. conf:

мой сайт.conf:

server { 
    server_name test-docker.local; 
    root /code/test/web; 

    location/{ 
     try_files $uri /app.php$is_args$args; 
    } 
    # DEV 
    location ~ ^/(app_dev|config)\.php(/|$) { 
     fastcgi_split_path_info ^(.+\.php)(/.*)$; 
     fastcgi_pass php:9000; 
     include fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 
     fastcgi_param DOCUMENT_ROOT $realpath_root; 
    } 
    # PROD 
    location ~ ^/app\.php(/|$) { 
     fastcgi_split_path_info ^(.+\.php)(/.*)$; 
     fastcgi_pass php:9000; 
     include fastcgi_params; 
     fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 
     fastcgi_param DOCUMENT_ROOT $realpath_root; 
     internal; 
    } 

    # return 404 for all other php files not matching the front controller 
    # this prevents access to other php files you don't want to be accessible. 

    error_log /var/log/nginx/project_error.log; 
    access_log /var/log/nginx/project_access.log; 
} 

В том же каталоге, что у меня есть мой docker.compose.yml и site.conf У меня есть код dir и внутри кода dir у меня есть тестовый каталог и внутри test die его мое приложение php.

У меня есть проблема в том, что, когда я отхожу корневой URL test-docker.local/

я получить File Not Found

Я вошел в контейнер PHP, чтобы увидеть, если код был скопирован в правильный путь, и он/вар/www/test/

Когда я ввожу свой веб-контейнер идентификатором кода под одним и тем же путем/var/www/test, но является то, что правильный путь для контейнера nginx - это то, что nginx загружает код из ...? и даже если да, почему у контейнера nginx должна быть копия кода, если теоретически код должен быть загружен из контейнера php?

ответ

0
  1. Вам не нужно повторять в обоих контейнерах:

    volumes: 
        - ./code/test:/var/www/test 
    

    Таким образом, в Nginx контейнере вы можете опустить этот объем

  2. Заменить в вашем site.conf:

    location/{ 
        try_files $uri /app.php$is_args$args; 
    } 
    

    с

    location/{ 
        try_files $uri @rewriteapp; 
    } 
    
    location @rewriteapp { 
        rewrite ^(.*)$ /app_dev.php/$1 last; # dev mode 
        # rewrite ^(.*)$ /app.php/$1 last; # prod mode 
    } 
    
0

Ваш Nginx конфигурации указывает на корень root /code/test/web;, но мне кажется, как этот путь доступен только на вашем Docker хосте, а не в контейнере Докер. Ваш файл docker-compose.yml устанавливает ./code/test в /var/www/test в контейнере, поэтому попробуйте использовать root /var/www/test/web; в вашей конфигурации nginx.

Смежные вопросы