【问题标题】:Laravel + Docker vendor autoload path errorLaravel + Docker 供应商自动加载路径错误
【发布时间】:2023-03-19 01:28:01
【问题描述】:

我在我的项目中使用了这个repository。这是 docker-compose 文件代码:

version: '3.6'
services:
  nginx:
    image: nginx:1.19-alpine
    container_name: default-structure-nginx
    restart: always
    volumes:
      - ./public:/var/www/public
      - ./nginx.develop.conf:/etc/nginx/nginx.conf
    ports:
      - 80:80
    depends_on:
      - app
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"

  app:
    build:
      context: .
      args:
        - COMPOSER_FLAGS=--prefer-dist --optimize-autoloader
    command: /usr/local/sbin/php-fpm
    container_name: default-structure-app
    restart: always
    ports:
      - 9000:9000
    environment:
      - OPCACHE_SAVE_COMMENTS=1
      - OPCACHE_VALIDATE_TIMESTAMPS=1
      - OPCACHE_REVALIDATE_FREQ=0
    volumes:
      - .:/var/www
      - ./php.ini:/usr/local/etc/php/php.ini
      - ./www.conf:/usr/local/etc/php-fpm.d/www.conf
    depends_on:
      - pgsql
      - redis

  schedule:
    image: ibrunotome/php:8.0
    container_name: default-structure-schedule
    restart: always
    command:
      - /bin/bash
      - -c
      - |
        chmod +x schedule.sh
        /var/www/schedule.sh
    environment:
      - OPCACHE_SAVE_COMMENTS=0
      - OPCACHE_VALIDATE_TIMESTAMPS=0
      - OPCACHE_REVALIDATE_FREQ=0
    volumes:
      - .:/var/www
      - ./php.ini:/usr/local/etc/php/php.ini
    depends_on:
      - pgsql
      - redis

  queue:
    image: ibrunotome/php:8.0
    container_name: default-structure-queue
    restart: always
    command: php artisan horizon
    environment:
      - OPCACHE_SAVE_COMMENTS=0
      - OPCACHE_VALIDATE_TIMESTAMPS=0
      - OPCACHE_REVALIDATE_FREQ=0
    volumes:
      - .:/var/www
      - ./php.ini:/usr/local/etc/php/php.ini
    depends_on:
      - pgsql
      - redis

  pgsql:
    image: launcher.gcr.io/google/postgresql13
    container_name: default-structure-pgsql
    ports:
      - 5432:5432
    environment:
      POSTGRES_DB: default
      POSTGRES_USER: default
      POSTGRES_PASSWORD: default
    volumes:
      - pg-data:/var/lib/postgresql/data

  redis:
    image: library/redis:6.0.10-alpine
    container_name: default-structure-redis
    restart: always
    ports:
      - 6379:6379
    volumes:
      - redis-data:/data
      
volumes:
  pg-data:
  redis-data:

源码 nginx.develop.conf:

worker_processes 1;

events {
    worker_connections 4096;
    multi_accept on;
    use epoll;
}

http {
    include       mime.types;
    server_tokens off;
    default_type  application/octet-stream;

    client_body_buffer_size 10K;
    client_header_buffer_size 1k;
    client_max_body_size 10m;
    large_client_header_buffers 4 16k;

    access_log off;
    error_log /dev/stderr;

    sendfile on;

    keepalive_timeout  15;
    keepalive_requests 10000;

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

        add_header 'Access-Control-Allow-Origin:' '*' 'always';
        add_header 'Access-Control-Allow-Credentials:' 'true' 'always';
        add_header 'Access-Control-Allow-Methods:' 'GET, HEAD, POST, PUT, PATCH' 'always';
        add_header 'Access-Control-Allow-Headers:' 'Authorization, Cache-Control, Content-Type, Keep-Alive, Origin, X-Requested-With' 'always';
        add_header 'Referrer-Policy' 'same-origin';
        add_header 'Feature-Policy' "geolocation 'none'; vibrate 'none'";
        add_header 'Strict-Transport-Security' 'max-age=31536000; includeSubdomains; preload';
        add_header 'X-Content-Type-Options' 'nosniff';
        add_header 'X-Frame-Options' 'SAMEORIGIN';
        add_header 'X-XSS-Protection' '1; mode=block';

        gzip on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";
        gzip_vary on;
        gzip_proxied any;
        gzip_comp_level 6;
        gzip_buffers 16 8k;
        gzip_http_version 1.1;
        gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript text/x-js;

        location ~* \.(js|jpg|jpeg|gif|png|css|tgz|gz|rar|bz2|doc|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|woff|woff2|svg)$ {
            expires 365d;
            access_log off;
            etag on;
            if_modified_since exact;
            add_header Pragma "public";
            add_header Cache-Control "max-age=31536000, public";
            add_header Access-Control-Allow-Origin *;
        }

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

        location ~ \.php$ {
            try_files $uri =404;
            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;
            fastcgi_read_timeout 180;
            proxy_set_header Host            $http_host;
            proxy_set_header X-Real-IP       $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        error_page 503 @503_json;
        error_page 502 @502_json;
        error_page 500 @500_json;
        error_page 404 @404_json;

        location @503_json {
            return 503 '{"data": {"message": "The server is temporary unable to serve your request"}, "meta": {"timestamp": $msec}}';
        }

        location @502_json {
            return 502 '{"data": {"message": "The server encountered a temporary error and could not complete your request"}, "meta": {"timestamp": $msec}}';
        }

        location @500_json {
            return 500 '{"data": {"message": "There was an error. Please try again later"}, "meta": {"timestamp": $msec}}';
        }

       location @404_json {
            return 404 '{"data": {"message": "The requested resource was not found"}, "meta": {"timestamp": $msec}}';
       }
    }
}

源码应用服务Dockerfile:

FROM ibrunotome/php:8.0-fpm

ARG COMPOSER_FLAGS

WORKDIR /var/www

COPY . /var/www

RUN composer install $COMPOSER_FLAGS \
    && mv php.ini /usr/local/etc/php/php.ini \
    && mv www.conf /usr/local/etc/php-fpm.d/www.conf \
    && chown -R 0:www-data /var/www \
    && find /var/www -type f -exec chmod 664 {} \; \
    && find /var/www -type d -exec chmod 775 {} \; \
    && chgrp -R www-data storage bootstrap/cache \
    && chmod -R ug+rwx storage bootstrap/cache

CMD ["/usr/local/sbin/php-fpm"]

EXPOSE 9000

当我运行 docker-compose 文件时,从 nginx 服务获取路径错误消息:

"PHP 消息:PHP 警告: 要求(/var/www/public/../vendor/autoload.php):打开失败 流:在线/var/www/public/index.php中没有这样的文件或目录 28PHP 消息:PHP 致命错误:未捕获错误:打开失败 需要'/var/www/public/../vendor/autoload.php' (include_path='.:/usr/local/lib/php') 在/var/www/public/index.php:28

如何更正vendor/autoload.php 文件的路径以修复错误?

【问题讨论】:

    标签: php laravel docker docker-compose laravel-8


    【解决方案1】:

    你应该将文件夹.:/var/www而不是./public:/var/www/public挂载到nginx容器并在location ~ \.php$中添加一行root /var/www;

    【讨论】:

    • 供应商文件夹的正确路径是什么?
    • 显示命令docker exec default-structure-app ls -la /var/www/vendor的结果
    • 显示命令docker exec default-structure-app composer install --prefer-dist --optimize-autoloaderdocker exec default-structure-app who的结果
    • docker-compose 文件中你应该从应用服务中删除volume .:/var/www
    • 来自default-structure-queue 容器?
    猜你喜欢
    • 2018-02-13
    • 2016-02-08
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    • 2018-11-27
    • 2018-03-06
    • 2019-03-16
    • 2013-08-28
    相关资源
    最近更新 更多