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

Laravel Docker环境下Composer install无法创建vendor文件夹问题求助

问题原因
  • 挂载覆盖问题:你在nginx和php的Dockerfile构建阶段创建的/var/www/html目录,会被容器启动时挂载的宿主机./src目录完全覆盖,构建阶段生成的目录不会同步到Droplet宿主机。如果宿主机的./src目录不存在,Docker会自动以root身份创建该目录,默认权限为root所有,容器内的非root用户没有写入权限。
  • Composer运行用户不匹配:原项目的composer服务默认未指定运行用户,执行docker-compose run --rm composer install时会默认以root身份运行,生成的vendor目录及文件权限为root所有,php/nginx服务运行的www-data用户无读写权限,触发目录创建失败报错。
解决方案
  1. 统一用户UID/GID配置
    在项目根目录的.env文件中添加以下配置,将容器内运行用户的UID/GID和你在Droplet上操作项目的用户保持一致(如果是用root用户操作,填0即可;如果是普通用户,默认UID为1000,可通过id命令查询当前用户UID):
NGINXUSER=1000
NGINXGROUP=1000
PHPUSER=1000
PHPGROUP=1000
  1. 修改composer服务运行用户
    打开docker-compose.yml,找到composer服务配置块,添加user参数,和php服务用户保持一致:
composer:
  build:
    context: .
    dockerfile: composer.dockerfile
    args:
      - PHPUSER=${PHPUSER:-www-data}
      - PHPGROUP=${PHPGROUP:-www-data}
  volumes:
    - ./src:/var/www/html
  user: "${PHPUSER:-www-data}" # 新增这一行
  networks:
    - laravel
  1. 重置目录权限与容器
    在Droplet项目根目录依次执行以下命令:
# 停止所有容器并清理关联卷
docker-compose down -v
# 手动创建src目录并修改权限(替换1000为你实际使用的用户UID/GID)
mkdir -p src
sudo chown -R 1000:1000 src
# 重新构建启动所有容器
docker-compose up -d --build
# 执行composer安装
docker-compose run --rm composer install
验证方法

执行以下命令查看目录权限是否正常:

docker-compose run --rm php ls -la /var/www/html

返回结果中目录所有者应和你设置的PHPUSER一致,而非root,此时站点即可正常读写目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:45:03