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

基于Google Cloud SDK镜像构建Docker时adduser命令执行失败

问题分析与解决方案

问题根源

gcr.io/google.com/cloudsdktool/google-cloud-cli:latest 基础镜像默认以非root的cloud-sdk用户运行,你编写的RUN命令会继承这个用户权限,而创建新用户、修改sudoers配置需要root权限,这就是导致adduser命令执行失败(exit code 2)的核心原因。

解决方案1:显式切回root执行用户配置

修改Dockerfile,在执行用户创建操作前显式切换回root:

FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:latest

# 切换回root权限执行后续敏感操作
USER root

ARG USER=coder
RUN adduser --disabled-password --gecos '' ${USER} && \
    echo "${USER} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/${USER} && \
    chmod 0440 /etc/sudoers.d/${USER}

# 切换到自定义非root用户
USER ${USER}
WORKDIR /home/${USER}

解决方案2:适配Alpine变体镜像

如果你的基础镜像实际是Alpine版本(比如使用带alpine标签的镜像),adduser命令参数与Debian/Ubuntu不同,还需要额外安装sudo:

FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:alpine

USER root

ARG USER=coder
RUN adduser -D -s /bin/sh ${USER} && \
    echo "${USER} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/${USER} && \
    chmod 0440 /etc/sudoers.d/${USER} && \
    apk add --no-cache sudo

USER ${USER}
WORKDIR /home/${USER}

调试小技巧

  • 临时添加命令确认当前用户和系统版本,排查环境问题:
RUN whoami && cat /etc/os-release
  • 拆分RUN命令,单独执行每一步,定位具体错误环节:
RUN adduser --disabled-password --gecos '' ${USER}
RUN echo "${USER} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/${USER}
RUN chmod 0440 /etc/sudoers.d/${USER}

内容的提问来源于stack exchange,提问作者quarks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:53:10