Докер nginx — Файл не найден

#docker #nginx

Вопрос:

Я установил свое приложение через docker на nginx. (Проект Laravel), но он возвращает «файл не найден» при попытке изменить корень nginx на var/www/public из var/www.

Я делюсь своими кодами ниже:

мое приложение.conf:

 server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

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

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

    server_tokens off;
}
 

мой докер-compose.yml

 version: '3.7'

services:

  app:
    build:
      context: docker/php
      dockerfile: Dockerfile
    container_name: app
    image: jjuanrivvera99/laravel:mysql-alpine
    restart: always
    depends_on:
      - redis
    volumes:
      - ./:/var/www
      - ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
    networks:
      - app-network

  web:
    image: nginx:alpine
    restart: always
    depends_on:
      - app
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./:/var/www
      - ./docker/nginx/:/etc/nginx/conf.d/
    networks:
      - app-network

  queue:
    restart: always
    depends_on:
      - redis
    image: jjuanrivvera99/laravel:mysql-alpine
    environment:
      CONTAINER_ROLE: "queue"
    volumes:
      - "./:/var/www/"
    networks:
      - app-network

  scheduler:
    restart: always
    depends_on:
      - redis
    image: jjuanrivvera99/laravel:mysql-alpine
    environment:
      CONTAINER_ROLE: "scheduler"
    volumes:
      - "./:/var/www/"
    networks:
      - app-network

  node:
    image: jjuanrivvera99/node:alpine
    restart: always
    build:
      context: docker/node
      dockerfile: Dockerfile
    container_name: node
    volumes:
      - ./:/var/www

  mysql:
    image: mysql:5.7.22
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: mdpocr
      MYSQL_ROOT_PASSWORD: Bugbytes13**
    volumes:
      - mysql-data:/var/lib/mysql/
      - ./docker/mysql/my.cnf:/etc/mysql/my.cnf
    networks:
      - app-network

  redis:
    image: redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - redis-data:/data
    networks:
      - app-network

networks:
  app-network:
    driver: bridge

volumes:
  mysql-data:
    driver: local

  redis-data:
    driver: local
 

что в этом плохого?

Это хорошо работает, когда я меняю root на /var/www. Но он возвращает «файл не найден», когда я изменяю его на /var/www/public.

Комментарии:

1. Вы создали /var/www/public этот каталог или его создает ваш проект?

2. мои файлы находятся в /var/www. и да, я создал /var/www/public