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

Dockerfile如何区分开发与生产环境的启动命令及依赖配置

适配双环境的Dockerfile调整方案

方案一:多阶段构建(更推荐,生产镜像更精简安全)

# 基础阶段:提取共用逻辑
FROM node:14 AS base
WORKDIR /usr/src/app
COPY package*.json ./

# 开发阶段:安装全量依赖,适配热更新需求
FROM base AS development
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]

# 生产阶段:仅安装生产依赖,编译TS后启动
FROM base AS production
RUN npm i --only=prod
COPY . .
RUN npm run build
CMD ["npm", "start"]

使用方式:

  • 开发环境构建:指定构建目标为开发阶段即可 docker build --target development -t app:dev .
    运行时需要挂载本地源码目录到容器内,才能触发TS文件变更监听,示例运行命令:docker run -p 你的端口:你的端口 -v $(pwd)/src:/usr/src/app/src -v /usr/src/app/node_modules app:dev
  • 生产环境构建:不需要额外参数,默认构建最后一个生产阶段 docker build -t app:prod . ,最终镜像仅保留运行必要的生产依赖和编译后的JS文件,没有冗余的TS开发工具链。

方案二:构建参数动态适配(适合需要单Dockerfile兼容的场景)

FROM node:14
WORKDIR /usr/src/app
# 定义环境参数,默认是开发环境
ARG NODE_ENV=development
COPY package*.json ./
# 根据环境参数安装对应依赖
RUN if [ "$NODE_ENV" = "production" ]; then npm i --only=prod; else npm install; fi
COPY . .
# 生产环境提前编译TS
RUN if [ "$NODE_ENV" = "production" ]; then npm run build; fi
ENV NODE_ENV=$NODE_ENV
# 动态选择启动命令
CMD ["sh", "-c", "if [ \"$NODE_ENV\" = \"production\" ]; then npm start; else npm run dev; fi"]

使用方式:

  • 开发环境直接默认构建运行即可
  • 生产环境构建时传入参数:docker build --build-arg NODE_ENV=production -t app:prod .

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:45:01