在k3s中通过Argo CD部署Node.js应用遇npm缺失start脚本错误
问题定位与解决方案:GitHub Actions构建的Node.js镜像部署npm start报错
问题现象
通过GitHub Actions构建的镜像在k3s服务器部署时,Argo CD报npm启动脚本缺失错误:
npm error Missing script: "start" npm error npm error Did you mean one of these? npm error npm star # Mark your favorite packages npm error npm stars # View packages marked as favorites npm error npm error To see a list of scripts, run: npm error npm run npm error A complete log of this run can be found in: /root/.npm_logs/2024-05-25T20_23_24_072Z-debug-0.log
本地构建的镜像可正常部署,仅CI构建的镜像出现此问题。
原因分析
本地构建时,你大概率是在auth目录下执行docker build,此时Docker构建上下文为auth目录,Dockerfile中的COPY package.json .会正确复制auth/package.json到容器。
但GitHub Actions的构建步骤中,默认使用仓库根目录作为构建上下文,而Dockerfile路径指定为auth/Dockerfile。这会导致Dockerfile中的COPY package.json .实际复制的是仓库根目录下的package.json(若根目录无此文件,则容器内的package.json不存在或内容不符),最终容器启动时找不到start脚本。
解决方案
方案1:指定构建上下文为auth目录(推荐)
修改GitHub Actions的build-push-action步骤,添加context: auth参数,让构建上下文与本地保持一致:
- name: Build and push uses: docker/build-push-action@v5 with: push: true context: auth # 指定构建上下文为auth目录 file: auth/Dockerfile tags: My-username/auth:latest platforms: linux/amd64
方案2:调整Dockerfile中的COPY路径
若不想修改构建上下文,可修改Dockerfile的COPY路径,从根目录的auth子目录复制文件:
FROM node:alpine WORKDIR /app COPY auth/package.json . RUN npm install --only=prod COPY auth/. . CMD ["npm", "start"]
验证步骤
- 重新触发GitHub Actions构建
- 拉取构建后的镜像,执行
docker run --rm My-username/auth npm run,确认输出中包含start脚本 - 通过Argo CD重新部署,验证问题解决
内容的提问来源于stack exchange,提问作者Timur
相关产品推荐
相关产品推荐

