2016-07-25 3 views
2

Ich versuche ein Docker-Image zu erstellen, um meine Symfony3-App auszuführen.Symfony-Docker-Konfiguration

Ich habe docker-composer.yml und site.conf

In meinem Docker-Komponist definiere ich zwei Container web und php und verbinden diese 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 

I offical nginx docs, wie zum Einrichten meiner Seite gefunden. conf:

meine site.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; 
} 

Im selben Verzeichnis, dass ich meine docker.compose.yml und site.conf habe Ich habe einen Code dir und innerhalb von code dir habe ich test dir und innerhalb test sterben ist es meine php-Anwendung.

Das Problem ist, dass ich, wenn ich test-docker.local/ meine Stamm-URL gehe

i bekommen File Not Found

ich die PHP-Container, wenn der Code in den richtigen Pfad wurde kopiert, um zu sehen eingegeben und es ist/var/www/test/

wenn ich meine Web-Container die Code-ID unter dem gleichen Pfad/var/www/test eingeben, aber ist das der richtige Pfad für nginx Container ist, dass nginx den Code von ... geladen wurde? Und wenn ja, warum muss der Nginx-Container eine Kopie des Codes haben, wenn der Code theoretisch aus dem PHP-Container geladen werden sollte?

Antwort

0
  1. Sie brauchen keine Wiederholung in beiden Behältern:

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

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

    So in nginx Container Sie dieses Volumen

  2. in Ihrem site.conf Ersetzen auslassen könnte

    mit

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

Ihre Nginx Config zeigt die Wurzel bei root /code/test/web; aber es scheint mir, wie dieser Pfad auf Ihrem Docker Host nur verfügbar ist, nicht in den Docker-Containern. Ihre docker-compose.yml-Datei wird im Container mit ./code/test unter /var/www/test bereitgestellt. Verwenden Sie daher in Ihrer Nginx-Konfiguration root /var/www/test/web;.