Ema*_*avi 5 amazon-web-services node.js docker dockerfile
这是我的dockerfile:
FROM node:6-onbuild
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
ENV PORT 80
EXPOSE ${PORT}
CMD [ "npm","run", "start" ]
Run Code Online (Sandbox Code Playgroud)
在package.json我有这个:
"scripts": {
"start": "node start.js",
"stagestart": "NODE_ENV=content-staging node start.js"
}
Run Code Online (Sandbox Code Playgroud)
该start脚本是用于生产的,现在我想要一种在dockerfile中运行staging脚本的方法.有没有办法在dockerfile中读取NODE_ENV,所以我可以有一个dockerfile来处理staging和production.
Adi*_*iii 11
这是两种可能的实现方式.
仅供参考:如果您已在系统级别设置NODE_ENV或在生成时间或在docker中运行时设置NODE_ENV,则无需在package.json中提及NODE_ENV.
这里Dockerfile虽然相同,但我曾经alpine基于图像
FROM node:alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
ENV PORT 3000
ARG DOCKER_ENV
ENV NODE_ENV=${DOCKER_ENV}
RUN if [ "$DOCKER_ENV" = "stag" ] ; then echo your NODE_ENV for stage is $NODE_ENV; \
else echo your NODE_ENV for dev is $NODE_ENV; \
fi
EXPOSE ${PORT}
CMD [ "npm","run", "start" ]
Run Code Online (Sandbox Code Playgroud)
使用此命令构建此Dockerfile时
docker build --build-arg DOCKER_ENV=stag -t test-node .
Run Code Online (Sandbox Code Playgroud)
你会在图层看到
---> Running in a6231eca4d0b your NODE_ENV for stage is stag
Run Code Online (Sandbox Code Playgroud)
当您运行此docker容器并运行此命令时,您的输出将是
/usr/src/app # echo $NODE_ENV
stag
Run Code Online (Sandbox Code Playgroud)
最简单的Approch相同的图像,但在运行时设置环境变量
你的Dockerfile
FROM node:alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app
ENV PORT 3000
EXPOSE ${PORT}
CMD [ "npm","run", "start" ]
Run Code Online (Sandbox Code Playgroud)
使用此命令运行此docker镜像
docker build -t test-node .
docker run --name test -e NODE_ENV=content-staging -p 3000:3000 --rm -it test-node ash
Run Code Online (Sandbox Code Playgroud)
因此,当您在容器上运行此命令时,您将看到
/usr/src/app # echo $NODE_ENV
content-staging
Run Code Online (Sandbox Code Playgroud)
因此,这就是如何使用NODE_ENV启动节点应用程序而无需在package.json中设置环境变量.因此,如果您的nodejs配置基于NODE_ENV,它应该根据NODE_ENV选择配置.
| 归档时间: |
|
| 查看次数: |
7314 次 |
| 最近记录: |