【问题标题】:"composer install" command does not create vendor folder when building docker image构建 docker 映像时,“composer install”命令不会创建供应商文件夹
【发布时间】:2022-01-16 11:02:03
【问题描述】:

我正在尝试在 docker 容器中运行一个 laraver 项目。

我的码头文件:

FROM php:8.0.12-cli

...
    
# Install composer.
ENV COMPOSER_ALLOW_SUPERUSER 1
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/bin --filename=composer --quiet \
    && rm -rf /root/.composer/cache

# Install git.
RUN apt-get update && apt-get install -y git

# Clone laravel project from repo.
RUN git clone https://${USERNAME}:${TOKEN}@github.com/${USERNAME}/api.myproject.com.git

# Copy laravel project to app folder.
RUN cp -r /api.myproject.com/. /app

WORKDIR /app

RUN composer install

一切似乎都很好,但是当我打开应用程序时,我看到了一个错误:

Warning: require(vendor/autoload.php): failed to open stream: No such file or directory

我进入容器发现vendor文件夹是missing,虽然执行composer install命令时没有错误,最后我收到了所有依赖安装成功的通知。

我不明白如何解决这个问题,我唯一的猜测是作曲家可能没有足够的权限来创建供应商目录。

【问题讨论】:

  • 克隆到一个目录,然后cp -rping 将所有内容放到一个不同的 目录中,充其量只是浪费时间。话虽如此,以上内容还不足以说明为什么会丢失该目录。上面的 Dockerfile应该在构建的镜像中创建一个 vendor director。缺少一些重要的细节。
  • 您不能使用 RUN composer 安装。安装卷时,该文件夹将被删除。你必须在入口点运行composer install

标签: laravel docker docker-compose composer-php


【解决方案1】:

我不是 docker 或 Linux 专业人士,但也许,您的工作目录应该是 /app/api.myproject.com

所以你正在运行cp -r /api.myproject.com/. /app。这会将api.myproject.com 文件夹(及其内容)复制到/app 目录。这意味着您的 composer.json 文件位于 /app/api.myproject.com/

你为什么不试试看会发生什么:

WORKDIR /app/api.myproject.com

RUN composer install

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 2018-09-02
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多