Docker Compose构建服务失败求助:adduser: The UID 0已被占用
解决Docker Compose构建时
adduser: The UID 0 is already in use错误 这个问题我之前踩过坑,核心原因其实很直白:你传入的${UID}环境变量值是0,而UID 0是Linux系统里root用户的专属ID,adduser命令自然没法再创建一个用这个UID的用户。下面是几个我亲测有效的解决方案:
方案一:避免传入UID=0的环境变量
先排查下你是怎么设置UID变量的——如果是直接继承主机环境(比如用UID=$(id -u) docker-compose up启动),那当你用root用户(id -u返回0)执行命令时就会触发这个错误。
解决办法:
- 切换到普通用户执行Docker Compose命令;
- 或者手动指定一个非0的UID,比如:
UID=1000 docker-compose up --build
方案二:在Dockerfile里添加条件判断
如果需要兼容root和普通用户场景,可以在Dockerfile里加一段逻辑,当传入的UID是0时直接使用root,否则创建指定UID的用户:
ARG UID RUN if [ "$UID" -eq 0 ]; then \ echo "Using root user"; \ else \ adduser -u ${UID} --disabled-password --gecos "" appuser; \ fi
这样即使不小心传入UID=0,构建也能正常完成。
方案三:跳过指定UID,让Docker自动分配
如果你的场景不需要严格和主机UID保持一致,完全可以去掉-u ${UID}参数,让adduser自动分配一个可用的UID:
RUN adduser --disabled-password --gecos "" appuser
这种方式最省心,适合对UID没有特殊要求的应用场景。
另外补充下,你的Docker版本19.03.6虽然不算最新,但这些方案在这个版本下都能正常工作,不需要升级Docker版本。
内容的提问来源于stack exchange,提问作者hvallenilla
相关产品推荐
相关产品推荐

