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

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(推荐)

这个方法能从根源解决权限问题,且不影响宿主机操作目录:

  1. 进入你的项目目录:
    cd ~/ve25
    
  2. 在.ddev目录下创建docker-compose.override.yaml文件:
    version: '3.6'
    services:
      web:
        user: "${UID}:${GID}"
    
    这个配置会让容器内web服务使用宿主机当前用户的UID和GID,自动匹配权限。
  3. 重启DDEV服务:
    ddev restart
    
  4. 重新执行Composer创建命令:
    ddev composer create drupal/recommended-project:^11
    

方法2:修改宿主机项目目录的权限

如果不想修改DDEV配置,可以直接把项目目录的所有者改成容器内www-data对应的UID:

  1. 执行权限修改命令:
    sudo chown -R 33:33 ~/ve25
    
    注:33是容器内www-data用户的默认UID,大部分DDEV镜像都是这个值。
  2. 重新执行Composer命令即可。
    缺点:后续在宿主机操作该目录可能需要sudo,不太方便。

方法3:临时跳过rsync同步(应急方案)

如果上述方法暂时无法执行,可以用--no-sync选项跳过DDEV的自动同步,手动复制文件:

  1. 执行Composer命令时添加--no-sync:
    ddev composer create drupal/recommended-project:^11 --no-sync
    
  2. 进入DDEV容器,将临时目录的文件复制到项目根目录:
    ddev ssh
    # 替换下方的[临时目录名]为命令输出中的目录(比如GvzJue)
    cp -r /tmp/[临时目录名]/* /var/www/html/
    exit
    

内容的提问来源于stack exchange,提问作者MArtin P Wilson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 06:43:12