docker - 如何在dockerfile中动态将环境变量设置为true

标签 docker npm dockerfile

我的应用程序具有功能标记,我想将其npm build动态设置为true。
本质上我想做类似的事情COMPILE_ASSETS=true npm buildNEW_EMAILS=true npm build,仅从CI动态生成。

我有一个将捕获该标志的CI管道,但是在将其设置为true并在Dockerfile中运行npm时遇到了麻烦。

我的Dockerfile-

FROM ubuntu:bionic
ARG FEATURE_FLAG
RUN if [ "x$FEATURE_FLAG" = "x" ] ; \
    then npm run build ; \
    else $FEATURE_FLAG=true npm run build; \
    fi


这与-
docker build --no-cache --rm -t testing --build-arg FEATURE_FLAG=my_feature_flag .(我想保持原样)

在CI我得到
/bin/sh: 1: my_feature_flag=true: not found
我已经尝试过各种形式的else语句-
  • else export $FEATURE_FLAG=true npm run build;(这实际上看起来像在我的Mac上正常运行,但在export: : bad variable name
  • 的CI中失败
  • else ${FEATURE_FLAG:+$FEATURE_FLAG=true} npm build;
  • else eval(`$FEATURE_FLAG=true npm build`);
  • `else env $ FEATURE_FLAG = true bash -c'npm build';

  • 这些都失败了:(

    我试图完全重新处理Dockerfile并将标志设置为true作为ENV-
    ARG FEATURE_FLAG
    ENV FF_SET_TRUE=${FEATURE_FLAG:+$FEATURE_FLAG=true}
    ENV FF_SET_TRUE=${FF_SET_TRUE:-null}
    RUN if [ "$FF_SET_TRUE" = "null" ] ; \
        then npm build; \
        else $FF_SET_TRUE npm build; \
        fi
    

    什么都行不通!这仅仅是bash的限制吗?运行命令之前无法扩展变量?

    还是使用Docker无法做到这一点?

    最佳答案

    你的意思是:

    FROM ubuntu:bionic
    ARG FEATURE_FLAG
    RUN set -eux; \
        if [ "x$FEATURE_FLAG" == "x" ] ; then \
            npm run build ; \
        else \
            eval $($FEATURE_FLAG=true npm run build); \
        fi
    

    您需要将命令包装在eval中,以使变量根据传递的ARGS进行扩展。

    关于docker - 如何在dockerfile中动态将环境变量设置为true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61946915/

    相关文章:

    ruby-on-rails - Ruby on Rails : DOcker : Is it feasible to build ROR project dependencies inside docker image

    node.js - 之后尝试启动 React 时出错(项目依赖树可能有问题....)

    php - Docker - 安装 php-memcached 扩展不工作?

    docker - COPY命令在多阶段Dockerfile中无法按预期工作

    python-3.x - Alpine Docker image FROM python :3. x-alpine3.x 使用与声明不同的 Python 包版本

    node.js - 跨容器传递容器IP以获取配置文件

    docker - Docker搜索命令始终列出空结果

    ruby-on-rails - Docker 组合 Rails + Oracle DB

    node.js - 如何更新 NPM 中的 devDependencies?

    node.js - Node.js 中的 Websocket 连接在发送时关闭