Symfony docker配置

时间:2016-07-25 15:00:46

标签: php nginx symfony

我正在尝试构建一个Docker镜像来运行我的Symfony3应用程序。

我有docker-composer.ymlsite.conf

在我的docker-composer中,我定义了两个容器webphp并链接这些容器:

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

我找到了关于如何设置我的site.conf的正式nginx docs

我的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;
}

在我的docker.compose.yml和site.conf的同一个目录中,我有一个代码目录,代码dir里面有测试目录,内部测试就是我的php应用程序。

我遇到的问题是当我去根网址test-docker.local/

我得到File Not Found

我进入了php容器,看看代码是否被复制到正确的路径中,它是/ var / www / test /

当我输入我的web容器时,代码id在同一路径/ var / www / test下,但是nginx容器的正确路径是nginx从...加载代码?即使这样,为什么nginx容器必须有一个代码的副本,如果在理论上代码应该从php容器加载?

2 个答案:

答案 0 :(得分:1)

您的Nginx配置指向root /code/test/web;根,但在我看来,该路径仅在您的docker主机上可用,而不是在docker容器中。您的docker-compose.yml文件在./code/test的容器中挂载/var/www/test,因此请尝试在您的nginx配置中使用root /var/www/test/web;

答案 1 :(得分: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
    }