Docker容器化PHP项目报错:找不到vendor/autoload.php文件求助
解决Docker PHP容器中vendor/autoload.php不存在的问题
问题根源
报错的核心是容器内/var/www/html/vendor/autoload.php文件缺失,由两个配置冲突导致:
- Dockerfile执行顺序错误:你先通过
composer install生成了vendor目录,随后执行COPY src/ /var/www/html/,若本地src目录无vendor,这一步会直接覆盖容器内刚生成的vendor目录。 - 挂载卷覆盖容器内容:docker-compose中把本地
./src/挂载到容器/var/www/html/,容器内该目录的所有内容会被本地src完全替代,即便Dockerfile生成了vendor,也会被本地无vendor的src覆盖。
解决方案
方案一:容器内安装依赖(推荐)
调整Dockerfile执行顺序,避免覆盖vendor,同时用匿名卷保护容器内的vendor目录不被挂载覆盖:
- 修改PHP Dockerfile:
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer COPY src/ /var/www/html/ RUN composer install --no-dev -d /var/www/html/
- 修改docker-compose.yaml:
php: build: context: . dockerfile: php/Dockerfile networks: - internal volumes: - ./src/:/var/www/html/ - /var/www/html/vendor/ # 匿名卷,防止本地挂载覆盖容器内的vendor - ./logs/php.log:/var/log/fpm-php.www.log
方案二:本地安装依赖后同步到容器
在本地项目的src目录下执行依赖安装,再通过挂载同步到容器:
cd src composer install --no-dev
执行完成后,本地src目录会生成vendor目录,保持现有Dockerfile和docker-compose配置即可。
验证方法
进入容器查看目录结构,确认vendor目录存在:
docker-compose exec php ls -la /var/www/html/
内容的提问来源于stack exchange,提问作者halunkatheking
相关产品推荐
相关产品推荐

