laravel docker 应用程序在运行作曲家时失败

问题描述 投票:0回答:1

我有一个在 Docker 上运行的 Laravel 应用程序。我开始在我的计算机上开发它并且运行良好。当我在另一台计算机上克隆代码并尝试运行它时,它失败了。

这是原文

Dockerfile

FROM php:8.1.12-fpm

ARG uid=1000
ARG user=inigomontoya

RUN apt-get update && apt-get install -y \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    libzip-dev \
    git \
    curl \
    zip \
    unzip \
    supervisor

# Install and enable xDebug
RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install php modules required by laravel.
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip

# Create system user to run Composer and Artisan commands.
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

# Install composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Create directory for supervisor logs
RUN mkdir -p "/etc/supervisor/logs" && chmod -R 775 "/etc/supervisor/logs"

# Set working directory
WORKDIR /var/www

# Copy supervisor config files
COPY ./docker/config/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

USER $user

这是与应用程序相关的

docker-compose.yaml
文件的一部分:

version: "3.9"
services:
  app:
    build:
      context: ./
      dockerfile: Dockerfile
    image: dmc
    container_name: dmc-app
    restart: unless-stopped
    working_dir: /var/www/
    # load development specific .env file
    env_file:
      - ./.env.development
    depends_on:
      - db
      - nginx
    volumes:
      - ./:/var/www/
      - ./docker/php/conf.d/xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
      - ./docker/php/conf.d/error_reporting.ini:/usr/local/etc/php/conf.d/error_reporting.ini
      - ./images:/public/images
#    ports:
#      - "8000:8000" # Error when using this port: Bind for 0.0.0.0:8000 failed: port is already allocated
    expose:
      - "9003"
    networks:
      - dmc-net

这是我遇到的错误:

Fatal error: Uncaught Error: Failed opening required '/var/www/vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /var/www/artisan on line 18
Error: Failed opening required '/var/www/vendor/autoload.php' (include_path='.:/usr/local/lib/php') in /var/www/artisan on line 18
Call Stack:
0.0001     393104   1. {main}() /var/www/artisan:0

现在,我根据网上找到的一些答案更新了我的

Dockerfile
docker-compose

首先我将

/var/www/vendor
安装在
volumes
中:

volumes:
      - /var/www/vendor

没有什么区别。

其次,更新

Dockerfile
以运行
composer install
,所以现在我的文件是:

FROM php:8.1.12-fpm

ARG uid=1000
ARG user=inigomontoya

# Copy composer.lock and composer.json
COPY composer.lock composer.json /var/www/

# Set working directory
WORKDIR /var/www

RUN apt-get update && apt-get install -y \
    libpng-dev \
    libonig-dev \
    libxml2-dev \
    libzip-dev \
    git \
    curl \
    zip \
    unzip \
    supervisor

# Install and enable xDebug
RUN pecl install xdebug \
    && docker-php-ext-enable xdebug

RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install php modules required by laravel.
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd zip

# Create system user to run Composer and Artisan commands.
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

ENV COMPOSER_ALLOW_SUPERUSER=1

# Install composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Run composer install
RUN /usr/bin/composer install
RUN /usr/bin/composer dump-autoload

COPY . .

# Create directory for supervisor logs
RUN mkdir -p "/etc/supervisor/logs" && chmod -R 775 "/etc/supervisor/logs"

# Copy supervisor config files
COPY ./docker/config/supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf

USER $user

并且作曲家文件似乎已正确安装,但我得到:

31.09 Generating optimized autoload files
31.91 > Illuminate\Foundation\ComposerScripts::postAutoloadDump
31.92 Script Illuminate\Foundation\ComposerScripts::postAutoloadDump handling the post-autoload-dump event terminated with an exception
31.92 
31.92 In autoload_real.php line 41:
31.92                                                                                
31.92   require(/var/www/vendor/composer/../../config/models.php): Failed to open s  
31.92   tream: No such file or directory 
31.92 
31.92 install [--prefer-source] [--prefer-dist] [--prefer-install PREFER-INSTALL] [--dry-run] [--download-only] [--dev] [--no-suggest] [--no-dev] [--no-autoloader] [--no-progress] [--no-install] [--audit] [--audit-format AUDIT-FORMAT] [-v|vv|vvv|--verbose] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--apcu-autoloader-prefix APCU-AUTOLOADER-PREFIX] [--ignore-platform-req IGNORE-PLATFORM-REQ] [--ignore-platform-reqs] [--] [<packages>...]
31.92 
------
failed to solve: process "/bin/sh -c /usr/bin/composer install" did not complete successfully: exit code: 1
make: *** [start-dev] Error 17

知道发生了什么事吗?

php laravel docker docker-compose composer-php
1个回答
0
投票

您是否尝试重新生成自动加载文件?

作曲家转储自动加载

© www.soinside.com 2019 - 2024. All rights reserved.