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

Jenkins Docker环境执行mssh报No user exists for uid 1000问题咨询

报错根因

No user exists for uid 1000是Jenkins调用Docker作为执行agent时的常见适配问题:

  • Jenkins启动Docker执行节点时,默认会透传宿主机上Jenkins进程的运行UID(绝大多数场景是1000)进容器,用这个UID执行所有步骤,不会默认切容器内置的root用户
  • 你用的python:3.7基础镜像里没有创建UID=1000的系统用户,而mssh(ec2instanceconnectcli内置的连接工具)启动时会读取/etc/passwd校验当前UID对应的用户条目,找不到匹配记录就直接抛这个错。
修复方案

按使用场景选对应方案即可:

方案1:修改Dockerfile创建匹配UID的用户(生产环境推荐,最稳定)

直接在现有Dockerfile里加创建用户的步骤,提前把UID=1000的用户建好,不需要调整Jenkinsfile配置:

FROM python:3.7
# 创建UID为1000的用户,匹配Jenkins透传的运行身份
RUN useradd -u 1000 -m jenkins
RUN pip install ec2instanceconnectcli

提交修改后重新触发流水线,镜像构建完成后即可正常执行mssh命令。

方案2:指定Docker agent用root运行(快速验证适用)

不想改镜像的话,直接调整Jenkinsfile里的dockerfile agent配置,加启动参数强制用root用户进容器执行,绕开UID不匹配问题:

stage('EC2 Connection'){
    agent{
        dockerfile {
            true
            args '-u root:root'
        }
    }
    steps{
        withAWS(credentials: '********', region: 'us-east-2') {
               sh 'mssh ************ --region us-east-2'
       }
    }
}

注意:该方案下容器内所有操作都以root权限执行,正式生产环境优先选方案1。

方案3:执行命令前临时补全passwd条目(临时排障适用)

如果既不能改镜像也不能改agent启动参数,可以在执行mssh前临时往容器的passwd文件里写入当前UID的用户记录:

steps{
    withAWS(credentials: '********', region: 'us-east-2') {
           sh '''
           echo "jenkins:x:$(id -u):0:Jenkins runtime user:/tmp:/bin/bash" >> /etc/passwd
           mssh ************ --region us-east-2
           '''
   }
}

该方案每次流水线运行都要重复执行写入操作,仅适合临时验证问题用,不建议长期使用。

校验方式

修复后可以在执行mssh前加一行调试命令,确认当前UID能匹配到对应用户:

id && grep $(id -u) /etc/passwd

命令能正常输出用户信息的话,再执行mssh就不会触发该报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 12:51:31