2016-12-03 83 views
2

我正在尝试使用Docker安装Symfony 3.x应用程序。 我通过搬运工-compose.yml文件中配置3个搬运工容器:找不到应该根据配置找到的PHP文件vHost

  • Nginx的
  • PHP-FPM
  • 的MySQL

当我导航到my-project.dev:8080/ ,我看到一个简单的404-未找到页面。

  • 我不能加载my-project.dev:8080/app_dev.php或my-project.dev:8080/config.php(我得到一个 “找不到文件” 的错误)

我在/var/log/nginx/access.log中也看不到任何条目。

泊坞窗,compose.yml:

web: 
    image: nginx:latest 
    ports: 
    - "8080:80" 
    volumes: 
    - .:/var/www 
    - ./docker/vhost.conf:/etc/nginx/sites-enabled/vhost.conf 
    - ./docker/nginx.conf:/etc/nginx/nginx.conf 
    links: 
    - php 

php: 
    image: php:5.6-fpm 
    volumes: 
    - .:/var/www 
    links: 
    - db 

db: 
    image: mysql:latest 
    volumes: 
    - /var/lib/mysql 
    environment: 
    - MYSQL_ROOT_PASSWORD=my-password 

nginx.conf文件:

user www-data; 
worker_processes 4; 

error_log /var/log/nginx/error.log warn; 
pid  /var/run/nginx.pid; 

events { 
    worker_connections 1024; 
} 

http { 
    include  /etc/nginx/mime.types; 
    default_type application/octet-stream; 

    log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
        '$status $body_bytes_sent "$http_referer" ' 
        '"$http_user_agent" "$http_x_forwarded_for"'; 

    access_log /var/log/nginx/access.log main; 

    sendfile  on; 
    #tcp_nopush  on; 

    keepalive_timeout 65; 

    #gzip on; 

    include /etc/nginx/conf.d/*.conf; 
    include /etc/nginx/sites-enabled/*; 
} 

vhost.conf文件:

server { 
    listen *:80; 

    server_name my-project.dev; 
    root /var/www/web; 

    location/{ 
     # try to serve file directly, fallback to app.php 
     try_files $uri /app.php$is_args$args; 
    } 

    # DEV 
    # This rule should only be placed on your development environment 
    # In production, don't include this and don't deploy app_dev.php or config.php 
    location ~ ^/(app_dev|config)\.php(/|$) { 
     fastcgi_pass php:9000; 
     fastcgi_split_path_info ^(.+\.php)(/.*)$; 
     include fastcgi_params; 

     fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 
     fastcgi_param DOCUMENT_ROOT $realpath_root; 
    } 

    location ~ \.php$ { 
     return 404; 
    } 

    error_log /var/log/nginx/error.log; 
    access_log /var/log/nginx/access.log; 
} 
+0

我不知道泊坞什么...但你的虚拟主机不需要也必须被告知监听8080端口?你有什么东西在8080上听吗? 'grep“8080”/ etc/nginx/sites-available/*'会返回任何内容吗? –

+0

嗨达伦,谢谢你的回复。我发现是什么导致了这个问题:我忘了为php-fpm image +添加'volume'配置属性+我不得不从/ var/www/html覆盖/ var/www中的“WORKDIR” php-fpm图像。 – mattyh88

回答

1

我不得不通过创建这样的图像覆盖PHP-FPM图像的WORKDIR:

Dockerfile:

FROM php:5.6-fpm 
MAINTAINER Firstname Lastname <[email protected]> 
WORKDIR /var/www 

制作图片:

docker build -t companyx/php-5.6-fpm . 

更新泊坞窗,撰写文件:

web: 
    image: nginx:latest 
    ports: 
    - "8080:80" 
    volumes: 
    - .:/var/www 
    - ./docker/vhost.conf:/etc/nginx/sites-enabled/vhost.conf 
    - ./docker/nginx.conf:/etc/nginx/nginx.conf 
    links: 
    - php 

php: 
    image: companyx/php-5.6-fpm 
    volumes: 
    - .:/var/www 
    links: 
    - db 

db: 
    image: mysql:latest 
    volumes: 
    - /var/lib/mysql 
    environment: 
    - MYSQL_ROOT_PASSWORD=my-password 
0

的问题是,这个你的定义:

location ~ ^/(app_dev|config)\.php(/|$) { 
    fastcgi_pass php:9000; 
    fastcgi_split_path_info ^(.+\.php)(/.*)$; 
    include fastcgi_params; 
    fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; 
    fastcgi_param DOCUMENT_ROOT $realpath_root; 
} 

location ~ \.php$ { 
    return 404; 
} 

您使用的是PHP页面,返回404

您应该更改 try_files $uri /app.php$is_args$args;

try_files $uri /app_dev.php$is_args$args;