Ubuntu 24.04.2 LTS下Docker-CE(rootless)运行DDEV执行Composer命令失败求助
问题分析与解决
错误原因
这个权限问题的核心是宿主机项目目录的用户UID/GID和DDEV容器内web服务用户(www-data)不匹配。Docker-CE在Linux环境下直接映射宿主机文件权限,而DDEV默认使用容器内的www-data用户(UID=33)操作/var/www/html目录,当宿主机目录的所有者UID/GID和33不一致时,容器内用户就没有读写权限,导致rsync操作失败。
解决办法
方法1:让DDEV容器使用宿主机用户的UID/GID(推荐)
这个方法能从根源解决权限问题,且不影响宿主机操作目录:
- 进入你的项目目录:
cd ~/ve25 - 在
.ddev目录下创建docker-compose.override.yaml文件:
这个配置会让容器内web服务使用宿主机当前用户的UID和GID,自动匹配权限。version: '3.6' services: web: user: "${UID}:${GID}" - 重启DDEV服务:
ddev restart - 重新执行Composer创建命令:
ddev composer create drupal/recommended-project:^11
方法2:修改宿主机项目目录的权限
如果不想修改DDEV配置,可以直接把项目目录的所有者改成容器内www-data对应的UID:
- 执行权限修改命令:
注:sudo chown -R 33:33 ~/ve2533是容器内www-data用户的默认UID,大部分DDEV镜像都是这个值。 - 重新执行Composer命令即可。
缺点:后续在宿主机操作该目录可能需要sudo,不太方便。
方法3:临时跳过rsync同步(应急方案)
如果上述方法暂时无法执行,可以用--no-sync选项跳过DDEV的自动同步,手动复制文件:
- 执行Composer命令时添加
--no-sync:ddev composer create drupal/recommended-project:^11 --no-sync - 进入DDEV容器,将临时目录的文件复制到项目根目录:
ddev ssh # 替换下方的[临时目录名]为命令输出中的目录(比如GvzJue) cp -r /tmp/[临时目录名]/* /var/www/html/ exit
内容的提问来源于stack exchange,提问作者MArtin P Wilson
相关产品推荐
相关产品推荐

