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

AWS EC2上Docker容器启动后立即退出(Jenkins流水线问题)

问题:Docker容器启动后立即退出,提示找不到server.js模块

问题现象

配置Jenkins多分支流水线将NodeJS应用构建为Docker镜像并部署到AWS EC2实例,流水线全阶段执行无报错,镜像推送正常,但容器启动后立即退出。通过docker ps -a可见已停止的容器,docker logs <containerID>返回模块找不到错误:

Error: Cannot find module '/home/node/app/server.js'

根因分析

从Jenkinsfile的构建阶段代码来看,执行docker build时的上下文是Jenkins工作区的根目录,但应用代码(包括server.js)都在app子目录下。这导致Docker构建时,COPY . .命令复制的是根目录的内容(而非app目录),最终容器的/home/node/app目录下没有server.js,启动时自然报错。

解决方案

修改Jenkinsfile的「Build and Push docker image」阶段,切换到app子目录执行Docker构建命令,确保构建上下文正确:

修改后的Jenkinsfile构建阶段代码

stage('Build and Push docker image') {
    when {
        expression {
            return env.GIT_BRANCH == "main"
        }
    }            
    steps {
        script {
            echo "building the docker image..."
            dir("app") { // 切换到app目录,以应用代码目录作为构建上下文
                withCredentials([usernamePassword(credentialsId: 'dockerhub', passwordVariable: 'PASS', usernameVariable: 'USER' )]) {
                    sh "docker build -t <docker-ID>/<docker-repo>:${IMAGE_NAME} ."
                    sh  "echo $PASS | docker login -u $USER --password-stdin"
                    sh "docker push <docker-ID>/<docker-repo>:${IMAGE_NAME}"
                }
            }
        }
    }
}

验证步骤

  1. 重新触发Jenkins流水线,构建完成后在EC2上拉取新镜像
  2. 执行以下命令验证容器内是否存在server.js:
    docker run --rm <your-image-name>:<your-tag> ls /home/node/app
    
    若输出包含server.js,则构建上下文问题已解决
  3. 启动容器,检查是否正常运行:
    docker-compose up -d
    docker ps
    

额外排查点

  • 检查项目根目录的.gitignore文件,确认未将server.js或app目录排除,避免构建时遗漏文件
  • 确认Dockerfile中的COPY --chown=node:node . .命令正确,确保文件权限正常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 14:09:50