You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker镜像缺少vendor目录,Laravel应用镜像构建求助

Troubleshooting Missing vendor Directory in Laravel Docker Image

Let's break down why your vendor directory isn't showing up in your Docker image, and walk through fixes for each likely issue:

1. Your .dockerignore setup is interfering with file copies

Looking at your Dockerfile steps:

WORKDIR /app
COPY . /app
# ... later ...
mv ./.dockerignore-local ./.dockerignore

When you run COPY . /app, Docker uses the original .dockerignore file from your local build context (not the .dockerignore-local you rename later). If that original .dockerignore excludes critical files like composer.json or composer.lock, they won't be copied into the image—and composer install can't create vendor without them.

Fix:

  • Check your local .dockerignore to ensure it doesn't block composer.json, composer.lock, or core Laravel files.
  • Or, copy your .dockerignore-local before the main app copy, so Docker uses the correct ignore rules upfront:
    WORKDIR /app
    # Copy the correct ignore file first
    COPY ./.dockerignore-local ./.dockerignore
    COPY . /app
    COPY ./entrypoint.sh /tmp
    # Rest of your steps...
    

2. composer install is failing silently

The --no-interaction flag means composer won't prompt for input, but it might still fail quietly if there's a problem (like network issues, missing PHP extensions, or invalid dependency versions). If the install fails, vendor won't be created.

Fix:

  • Build your image with verbose output to see composer's full logs:
    docker build --progress=plain -t your-laravel-image .
    
  • Add the --verbose flag to your composer command to get more details during installation:
    composer install --no-interaction --verbose
    
  • Double-check that all PHP extensions required by your Laravel dependencies are installed (your current setup covers common ones, but some packages might need extras like bcmath or xml).

3. Docker's build cache is skipping the install step

If you've built the image before and your composer.json/composer.lock files haven't changed, Docker will reuse the cached layer from the previous composer install run. If that earlier run failed (or didn't generate vendor), the cache will preserve that broken state.

Fix:

  • Build without cache to force a fresh composer install:
    docker build --no-cache -t your-laravel-image .
    
  • For better caching in future builds, copy only the composer files first—this way, the cache only invalidates when your dependencies change:
    WORKDIR /app
    # Copy composer files first for optimized caching
    COPY composer.json composer.lock ./
    RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
     && composer install --no-interaction
    # Then copy the rest of your app
    COPY . /app
    # Rest of your steps...
    

4. Permissions are blocking vendor creation

While you run composer install as root (since you don't switch users in the Dockerfile), there might be a permission conflict with the files you copied into /app. For example, if your local files are owned by a user UID that doesn't exist in the container, root should still have write access—but it's worth verifying.

Fix:

Add a quick check step before composer install to confirm /app is writable:

RUN ls -la /app && mkdir -p /app/test && echo "Write test passed" > /app/test/write-check.txt

If this step fails, adjust directory permissions earlier in your Dockerfile (e.g., chmod -R 755 /app after copying files).

Quick Verification Step

To confirm whether composer is even attempting to create vendor, add an ls command right after the install:

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
 && composer install --no-interaction \
 && ls -la /app # This will show if vendor exists

Check the build output for this ls command—if vendor isn't listed, composer definitely failed to generate it.


内容的提问来源于stack exchange,提问作者Juliatzin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:56:14