我有一个在 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
知道发生了什么事吗?
您是否尝试重新生成自动加载文件?
作曲家转储自动加载