构建Android Cuttlefish Docker镜像时的权限与文件复制问题
解决Android Cuttlefish Docker容器构建的两类问题
问题1:root身份执行构建时的UID冲突错误
以root身份运行./build.sh --rebuild_debs_verbose时,出现useradd: UID 0 is not unique报错,原因是root用户的UID为0,而Docker容器内默认已存在UID为0的root用户,脚本尝试创建同UID的vsoc-01用户导致冲突。
解决办法:
- 方式1:执行脚本时手动指定非0的UID环境变量(比如普通用户常用的1000):
UID=1000 ./build.sh --rebuild_debs_verbose - 方式2:修改
docker目录下的Dockerfile,将RUN useradd指令中的$UID替换为固定非0值:RUN useradd -ms /bin/bash vsoc-01 -d /home/vsoc-01 -u 1000 && passwd -d vsoc-01 && echo 'vsoc-01 ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers - 方式3:直接用已加入docker用户组的普通用户执行脚本(无需sudo)。
问题2:普通用户使用无根Docker时,cp操作错误指向主机目录
该问题是因为脚本中的部分文件复制逻辑未限定在Docker构建上下文内,错误直接操作主机的/home/vsoc-01路径。
解决办法:
- 检查
build.sh中的cp命令,确保所有文件复制操作都通过Dockerfile的COPY或RUN指令执行,而非直接在主机环境运行。 - 确保构建上下文正确:所有需要复制到容器的文件都放在
docker目录(或指定的构建上下文目录)下,避免引用主机绝对路径。 - 调整无根Docker权限:确保当前用户拥有Docker操作权限,且主机上不存在
/home/vsoc-01目录(或脚本中不要直接引用该主机路径)。
内容的提问来源于stack exchange,提问作者Diego Kvara
相关产品推荐
相关产品推荐

