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

Jenkins执行Docker命令遇input device is not a TTY错误求助

解决Jenkins Pipeline中Docker命令"input device is not a TTY"错误

错误根源

Jenkins流水线运行在非交互式环境,docker run或docker exec的-it参数里,-t会要求分配伪终端(TTY),但Jenkins无法提供,因此必须移除-t参数。

修正后的Jenkinsfile

pipeline {
    agent { label 'pulse_ec2' }
    
    stages {
        stage('Clean workspace') {
            steps {
                cleanWs()
            }
        }
        stage('Clone adas_bt_wifi_docker_setup repo') {
            steps {
                script{
                    git url: 'repourl', branch: 'master', credentialsId: 'key'
                    sh 'gzip -d  *.tar.gz'
                    sh 'docker load -i *.tar'
                    sh 'docker images'
                    
                    // 1. 启动容器:仅用-d后台运行,移除-it参数
                    sh 'docker run -d $(docker images | awk \'{print $3}\' | awk \'NR==2\')'
                    
                    // 2. 正确获取最新启动的容器ID:用docker ps内置参数更可靠
                    def containerId = sh(
                        script: "docker ps --latest --quiet",
                        returnStdout: true
                    ).trim()
                    
                    // 3. 执行容器内命令:移除-t,仅保留-i(或直接省略,若无需输入)
                    // 方式1:直接执行单条命令
                    sh "docker exec $containerId ls -lt"
                    
                    // 方式2:执行多条命令(用here-doc)
                    sh """
                        docker exec -i $containerId bash << 'EOF'
                        ls -lt
                        # 可添加其他需要执行的命令,比如pwd、whoami等
                        EOF
                    """
                }
            }
        }
    }
}

关键修改说明

  • 启动容器时移除-it:后台运行容器无需交互式终端,-d参数足够,避免触发TTY错误。
  • 容器ID获取优化:使用docker ps --latest --quiet直接获取最新启动容器的ID,比管道拼接head/tail/awk更简洁且不易出错。
  • docker exec调整:移除-t参数,仅保留-i(如果需要向容器内传递输入);若只是执行非交互式命令,可直接省略-i。
  • 避免直接进入bash:Jenkins是非交互式环境,直接执行目标命令或用here-doc批量执行命令,比进入bash更高效且符合流水线运行逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:55:03