gpt4 book ai didi

node.js - 将 NODE_ENV 传递给 docker 以运行 package.json 脚本

转载 作者:搜寻专家 更新时间:2023-10-31 22:57:27 25 4
gpt4 key购买 nike

这是我的 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" ]

在 package.json 中我有这个:

"scripts": {
"start": "node start.js",
"stagestart": "NODE_ENV=content-staging node start.js"
}

start 脚本用于生产,现在我想要一种在 dockerfile 中运行暂存脚本的方法。有没有一种方法可以读取 dockerfile 中的 NODE_ENV,这样我就可以拥有一个处理暂存和生产的 dockerfile。

最佳答案

这里有两种可能的实现方式。

FYI: you don't need to mention NODE_ENV in package.json if you already set NODE_ENV at the system level or set NODE_ENV during build time or runtime in docker.

这里的 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" ]

当您使用此命令构建此 Dockerfile 时

docker build --build-arg DOCKER_ENV=stag -t test-node .

你会在图层上看到

 ---> Running in a6231eca4d0b your NODE_ENV for stage is stag

当您运行此 docker 容器并运行此命令时,您的输出将是

/usr/src/app # echo $NODE_ENV

stag

最简单的方法相同的图像,但在运行时设置环境变量

你的 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" ]

使用这个命令运行这个 docker 镜像

docker build -t  test-node .

docker run --name test -e NODE_ENV=content-staging -p 3000:3000 --rm -it test-node ash

所以当你在容器中运行这个命令时你会看到

/usr/src/app # echo $NODE_ENV
content-staging

这就是您可以使用 NODE_ENV 启动 Node 应用程序而无需在 package.json 中设置环境变量的方法。因此,如果您的 nodejs 配置基于 NODE_ENV,它应该根据 NODE_ENV 选择配置。

关于node.js - 将 NODE_ENV 传递给 docker 以运行 package.json 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49269670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com