首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当对接Laravel应用程序时"GET /index.php“404

当对接Laravel应用程序时"GET /index.php“404
EN

Stack Overflow用户
提问于 2018-07-23 15:22:13
回答 1查看 3.7K关注 0票数 4

我试图有一个非常小的设置,对接Laravel应用程序。即使nginx能够将请求转发到Laravel容器,我仍然得到了GET /index.php" 404

代码语言:javascript
复制
C:\yocto\snapweb>docker-compose logs --follow laravel
Attaching to snapweb_laravel_1
laravel_1  | [23-Jul-2018 07:10:04] NOTICE: fpm is running, pid 1
laravel_1  | [23-Jul-2018 07:10:04] NOTICE: ready to handle connections
laravel_1  | 172.18.0.3 -  23/Jul/2018:07:14:01 +0000 "GET /index.php" 404

当我进入laravel容器时,它看起来是这样的。在我看来没问题。

在Laravel容器内部

代码语言:javascript
复制
/var/www/html # pwd
/var/www/html
/var/www/html # ls -al
total 224
drwxr-xr-x    1 root     root          4096 Jul 23 07:09 .
drwxr-xr-x    1 root     root          4096 Jul 21 08:11 ..
-rwxr-xr-x    1 root     root           668 Jul 23 07:08 Dockerfile
drwxr-xr-x    6 root     root          4096 May  8 19:42 app
-rwxr-xr-x    1 root     root          1686 May  8 19:42 artisan
drwxr-xr-x    3 root     root          4096 May  8 19:42 bootstrap
-rw-r--r--    1 root     root          1477 May  8 19:42 composer.json
-rw-r--r--    1 root     root        144199 Jul 23 07:03 composer.lock
drwxr-xr-x    2 root     root          4096 May  8 19:42 config
drwxr-xr-x    5 root     root          4096 May  8 19:42 database
-rw-r--r--    1 root     root          1022 May  8 19:42 package.json
-rw-r--r--    1 root     root          1134 May  8 19:42 phpunit.xml
drwxr-xr-x    4 root     root          4096 May  8 19:42 public
-rw-r--r--    1 root     root          3675 May  8 19:42 readme.md
drwxr-xr-x    5 root     root          4096 May  8 19:42 resources
drwxr-xr-x    2 root     root          4096 May  8 19:42 routes
-rw-r--r--    1 root     root           563 May  8 19:42 server.php
drwxr-xr-x    5 root     root          4096 May  8 19:42 storage
drwxr-xr-x    4 root     root          4096 May  8 19:42 tests
drwxr-xr-x   37 root     root          4096 Jul 23 07:03 vendor
-rw-r--r--    1 root     root           549 May  8 19:42 webpack.mix.js
/var/www/html # ls -al public
total 32
drwxr-xr-x    4 root     root          4096 May  8 19:42 .
drwxr-xr-x    1 root     root          4096 Jul 23 07:09 ..
-rw-r--r--    1 root     root           593 May  8 19:42 .htaccess
drwxr-xr-x    2 root     root          4096 May  8 19:42 css
-rw-r--r--    1 root     root             0 May  8 19:42 favicon.ico
-rw-r--r--    1 root     root          1823 May  8 19:42 index.php
drwxr-xr-x    2 root     root          4096 May  8 19:42 js
-rw-r--r--    1 root     root            24 May  8 19:42 robots.txt
-rw-r--r--    1 root     root           914 May  8 19:42 web.config
/var/www/html #

我可以知道我的设置出了什么问题吗?以下是我的极简主义Dockerfiles

laravel/Dockerfile

代码语言:javascript
复制
FROM php:7.2.8-fpm-alpine3.7

RUN apk update && \
    apk add git && \
    apk add unzip

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer    

# Get laravel into a temporary folder.
RUN composer create-project --prefer-dist laravel/laravel laravel-install-tmp

# Move local host files to docker container.
COPY . /var/www/html

# Copy all laravel files, without overwrite files from host.
RUN false | cp -ai /var/www/html/laravel-install-tmp/* /var/www/html/ 2>/dev/null

# Remove temporary folder.
RUN rm -rf /var/www/html/laravel-install-tmp/

WORKDIR /var/www/html

CMD ["php-fpm", "-F"]

nginx/default.conf

代码语言:javascript
复制
server {
    listen 443;
    ssl on;

    ssl_certificate /app/cert.pem;
    ssl_certificate_key /app/key.pem;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass laravel:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }   
}

nginx/Dockerfile

代码语言:javascript
复制
FROM nginx:1.13.9-alpine

COPY . /app

RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.d/

docker-compose.yml

代码语言:javascript
复制
version: '2'
services:

  # Note, SSL cert (cert.pem and key.pem) is generated from cloudflare.
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    restart: always
    ports:
     - "2053:443"


  laravel:
    build:
      context: ./laravel
      dockerfile: Dockerfile
    restart: always
EN

回答 1

Stack Overflow用户

发布于 2018-07-24 01:19:58

这是我的最小配置,这使得Laravel可以在Docker中工作。以前,它不起作用,因为它没有在Nginx容器中包含以下行。(尽管错误发生在Laravel容器中)

代码语言:javascript
复制
root /var/www/html/public;

laravel/html (文件夹)

此文件夹是使用以下命令行生成的。该命令在主机中执行。

代码语言:javascript
复制
docker run --rm -v $(pwd):/app -w /app composer/composer create-project --prefer-dist laravel/laravel html (Linux)
docker run --rm -v %cd%:/app -w /app composer/composer create-project --prefer-dist laravel/laravel html (Windows)

laravel/Dockerfile

代码语言:javascript
复制
FROM php:7.2.8-fpm-alpine3.7

COPY html /var/www/html

WORKDIR /var/www/html

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer    

RUN composer install

RUN cp .env.example .env

RUN php artisan key:generate

RUN php artisan optimize

CMD ["php-fpm", "-F"]

nginx/default.conf

代码语言:javascript
复制
server {
    listen 443;
    ssl on;
    root /var/www/html/public;

    ssl_certificate /app/cert.pem;
    ssl_certificate_key /app/key.pem;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass laravel:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }   
}

nginx/Dockerfile

代码语言:javascript
复制
FROM nginx:1.13.9-alpine

COPY . /app

RUN rm /etc/nginx/conf.d/default.conf
COPY default.conf /etc/nginx/conf.d/

docker-compose.yml

代码语言:javascript
复制
version: '2'
services:

  # Note, SSL cert (cert.pem and key.pem) is generated from cloudflare.
  nginx:
    build:
      context: ./nginx
      dockerfile: Dockerfile
    restart: always
    ports:
     - "2053:443"


  laravel:
    build:
      context: ./laravel
      dockerfile: Dockerfile
    restart: always

然后您可以使用以下命令访问Laravel应用程序

代码语言:javascript
复制
https://localhost:2053/
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51473488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档