Node.js 如何在Dockerfile中为不同的构建环境运行不同的入口点命令?

Node.js 如何在Dockerfile中为不同的构建环境运行不同的入口点命令?,node.js,docker,dockerfile,docker-build,Node.js,Docker,Dockerfile,Docker Build,现在我有一个Dockerfile: FROM node:12-slim WORKDIR / COPY ./package.json ./package.json COPY ./dist ./dist RUN npm install ENTRYPOINT npm start # ENTRYPOINT npm run dev 您可以看到,对于入口点,我有两个选项。在开发时,我需要它运行npm-run-dev。当我部署它时,我需要它运行npm start 如何在保留单个Dockerfile文

现在我有一个
Dockerfile

FROM node:12-slim

WORKDIR /

COPY ./package.json ./package.json
COPY ./dist ./dist

RUN npm install

ENTRYPOINT npm start
# ENTRYPOINT npm run dev
您可以看到,对于
入口点
,我有两个选项。在开发时,我需要它运行
npm-run-dev
。当我部署它时,我需要它运行
npm start

如何在保留单个
Dockerfile
文件的同时执行此操作

有没有一种方法可以传递某种构建参数/ENV变量?人们通常如何处理这个问题

以下是我如何运行它:

docker run hello-world:latest

如果将
ENTRYPOINT
更改为
CMD
,可以在
docker run
命令行轻松覆盖它:

#无入口点
CMD npm启动
#图像名称后的命令覆盖CMD
docker run hello world:最新npm运行开发
(有一个
docker-run--entrypoint
选项,但它的语法非常笨拙。)

人们通常如何处理这个问题

在Docker之外,我尽可能多地进行开发。对于我来说,很少遇到对精确的解释器版本敏感的问题,而且主机环境通常也没有什么不同。对于Docker中唯一发生的事情就是应用程序构建的前端应用程序来说,这是双重事实;所有运行时和I/O都发生在最终用户的浏览器中

#没有Docker
npm运行开发
npm运行测试
毛绒
#发货
docker build-t我的/图像。
docker run-p 3000:3000车型年款/图像

如果可能,请在测试和生产环境中运行相同的映像。请勿使用绑定装载或其他卷装载覆盖映像中的代码。

如果将
ENTRYPOINT
更改为
CMD
,可以在
docker run
命令行轻松覆盖它:

#无入口点
CMD npm启动
#图像名称后的命令覆盖CMD
docker run hello world:最新npm运行开发
(有一个
docker-run--entrypoint
选项,但它的语法非常笨拙。)

人们通常如何处理这个问题

在Docker之外,我尽可能多地进行开发。对于我来说,很少遇到对精确的解释器版本敏感的问题,而且主机环境通常也没有什么不同。对于Docker中唯一发生的事情就是应用程序构建的前端应用程序来说,这是双重事实;所有运行时和I/O都发生在最终用户的浏览器中

#没有Docker
npm运行开发
npm运行测试
毛绒
#发货
docker build-t我的/图像。
docker run-p 3000:3000车型年款/图像

如果可能,请在测试和生产环境中运行相同的映像。不要用绑定装载或其他卷装载来覆盖映像中的代码。

你绝对是对的。我不应该使用运行的docker容器进行开发。这是绝对没有必要的。我应该在本地运行
express
服务器,它的行为应该非常相似。感谢您的所有建议。如果您想在容器环境外部进行开发,但在容器环境内部运行应用程序,您可以创建绑定装载卷。您完全正确。我不应该使用运行的docker容器进行开发。这是绝对没有必要的。我应该在本地运行
express
服务器,它的行为应该非常相似。感谢您提供的所有建议。如果您希望在容器环境外部进行开发,但在容器环境内部运行应用程序,则可以创建绑定装载卷。