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}" } } } } }
验证步骤
- 重新触发Jenkins流水线,构建完成后在EC2上拉取新镜像
- 执行以下命令验证容器内是否存在
server.js:
若输出包含docker run --rm <your-image-name>:<your-tag> ls /home/node/appserver.js,则构建上下文问题已解决 - 启动容器,检查是否正常运行:
docker-compose up -d docker ps
额外排查点
- 检查项目根目录的
.gitignore文件,确认未将server.js或app目录排除,避免构建时遗漏文件 - 确认Dockerfile中的
COPY --chown=node:node . .命令正确,确保文件权限正常
内容的提问来源于stack exchange,提问作者CS_91
相关产品推荐
相关产品推荐

