gpt4 book ai didi

docker - 根据环境在Dockerfile中调用不同的命令

转载 作者:行者123 更新时间:2023-12-02 18:26:53 25 4
gpt4 key购买 nike

根据环境类型(即开发或生产),从npm调用不同的Dockerfile脚本的最佳方法是什么?

我当前的Dockerfile如下:

FROM node:12.15.0-alpine

ARG env

WORKDIR /usr/app

COPY ./ /usr/app

CMD npm run start

EXPOSE 5000

理想情况下,我要么希望能够运行npm run start:development脚本,要么就可以运行start:production脚本。

我尝试将ARG和ENV变量混合使用以获得预期的效果。但是从下面已关闭的GitHub问题来看,它们在我需要的周期的正确部分中不可用。


CMD npm run start:${env}

首先,我想知道是否有一种首选的方法可以将所有内容保存在一个 Dockerfile中。

编辑:

我的以下代码取得了一些成功,但有时会导致我的终端无法响应。
RUN if [ "$env" = "production" ]; then \
npm run start:prod; \
else \
npm run start:dev; \
fi

最佳答案

Dockerfile在“构建”上下文中运行,因此任何可用变量都与构建环境(运行docker build时)有关,而不与执行环境有关。当您生成镜像时,生成过程仅在第一次运行。

如果要使用在执行时定义的环境变量,可以使用指向容器脚本的CMD。在此脚本中,所有环境变量都可以从初始执行(容器开始)开始使用。

Docker文件

...
COPY ./scripts /script/path
CMD /script/path/test.sh

./scripts/test.sh
cd /your/app/path
echo ENV = $ENV
npm run start:$ENV

您还可以通过示例和用例回顾Dockerfile的最佳实践

https://docs.docker.com/develop/develop-images/dockerfile_best-practices/

关于docker - 根据环境在Dockerfile中调用不同的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60197212/

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