Ubuntu 22.04下Docker运行Laravel Composer无法创建vendor目录
解决Laravel Sail/Composer容器权限问题
一、针对拉取的现有项目
报错/var/www/html/vendor does not exist and could not be created的核心是容器内用户没有挂载目录的写入权限,别乱执行chown,按以下步骤处理:
- 先不指定用户,临时用容器root权限执行composer安装(自动创建vendor目录):
docker run --rm \ -v $(pwd):/var/www/html \ -w /var/www/html \ laravelsail/php81-composer:latest \ composer install --ignore-platform-reqs
- 把生成的vendor目录权限同步到宿主用户:
sudo chown -R $USER:$USER vendor
- 后续再用带用户参数的命令执行composer操作就不会触发权限问题。
嫌容器操作麻烦的话,也可以直接在宿主机器安装Composer,直接执行composer install --ignore-platform-reqs,再用Sail启动服务,权限完全匹配宿主用户。
二、针对全新Laravel Sail项目
执行sail up后运行composer install或npm install报错权限,是因为Sail容器默认使用www-data用户,和宿主用户权限不匹配,解决方法有两种:
方法一:临时修改容器内目录权限
- 进入Sail容器的root shell:
sail root-shell
- 在容器内修改项目目录权限:
chown -R sail:sail /var/www/html
- 退出容器后,用
sail composer install或sail npm install执行命令即可正常运行。
方法二:配置环境变量永久匹配权限
- 在项目的
.env文件中添加以下变量(替换为宿主用户的UID和GID,不确定的话在宿主执行id -u和id -g查看):
WWWUSER=1000 WWWGROUP=1000
- 重启容器生效:
sail down && sail up -d
内容的提问来源于stack exchange,提问作者Jesper Andersen
相关产品推荐
相关产品推荐

