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

Docker容器Shell脚本执行npm run start时提示npm未找到的解决问询

解决Docker容器中npm命令找不到的问题

问题核心原因:
你的Dockerfile采用了多阶段构建,最终运行容器的镜像基于nginx:alpine——这个镜像默认没有安装Node.js和npm。前一个node:16.14.2阶段的Node环境、依赖包等内容,没有被复制到最终的nginx镜像中,所以执行script.sh里的npm run start时会提示"npm: not found"。

下面提供两种可行的解决方案:

方案一:多阶段构建,复制Node环境到nginx镜像

修改Dockerfile,在nginx阶段添加复制Node环境和项目文件的步骤,确保最终镜像同时包含nginx和Node.js:

# Build environment(构建阶段,生成依赖和项目文件)
FROM node:16.14.2 AS builder
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . ./

# Server environment(最终运行镜像)
FROM nginx:alpine
# 从构建阶段复制Node.js核心文件和项目内容
COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY --from=builder /usr/local/bin/npm /usr/local/bin/npm
COPY --from=builder /usr/local/bin/node /usr/local/bin/node
COPY --from=builder /usr/src/app /usr/src/app

COPY nginx.conf /etc/nginx/conf.d/configfile.template
ENV HOST 0.0.0.0
ENV NODE_ENV production
EXPOSE 8080

# 设置项目工作目录
WORKDIR /usr/src/app
COPY script.sh /
RUN chmod +x /script.sh

ENTRYPOINT ["/script.sh"]

方案二:以Node镜像为基础安装nginx(更简洁)

放弃多阶段构建的nginx基础镜像,直接用Node镜像作为基础,在其中安装nginx,这样镜像天然包含Node环境:

FROM node:16.14.2-alpine
WORKDIR /usr/src/app

# 安装nginx及必要依赖
RUN apk add --no-cache nginx && mkdir -p /run/nginx

# 安装项目依赖
COPY package*.json ./
RUN npm install --only=production
COPY . ./

# 配置nginx
COPY nginx.conf /etc/nginx/conf.d/configfile.template
ENV HOST 0.0.0.0
ENV NODE_ENV production
EXPOSE 8080

# 添加并执行脚本
COPY script.sh /
RUN chmod +x /script.sh

ENTRYPOINT ["/script.sh"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 09:39:32