Docker条件处理

xqnpmsa8  于 2023-04-20  发布在  Docker
关注(0)|答案(2)|浏览(100)

我无法让条件Dockerfile工作。
我的命令是:docker build -t test --progress=plain --build-arg APP_BRANCH=main .

FROM alpine:latest AS base

ARG APP_BRANCH

我试过使用简单的if... else:

RUN\

    if [ "${APP_BRANCH}" == "main" ];\

        then echo "MAIN app";\

    elif [ "${APP_BRANCH}" == "dev" ];\

        then echo "DEV app";\

    else echo "Something else!!";\

    fi

我收到类似/bin/sh: 1: [: main: unexpected operatorfixed的东西
看看变量是否被设置了。确实是。
然后我尝试使用MultiStage构建:

FROM base AS main

RUN echo "MAIN"


FROM base AS prod

RUN echo "PROD"


FROM ${APP_BRANCH} AS final

RUN echo "FINAL"

并得到输出:base name (${APP_BRANCH}) should not be blank
我还尝试在entrypoint中使用${APP_分支} var

ENTRYPOINT ["java", "-jar", "/usr/share/myapp/myAppName-${APP_BRANCH}.jar

但是它的行为就像变量没有被设置。Buildkit被禁用了。我该怎么做才能让它工作呢?

gjmwrych

gjmwrych1#

我不能复制你的问题。
使用以下Dockerfile

FROM alpine:latest
ARG APP_BRANCH
RUN\
    if [ "${APP_BRANCH}" == "main" ];\
        then echo "MAIN app";\
    elif [ "${APP_BRANCH}" == "dev" ];\
        then echo "DEV app";\
    else echo "Something else!!";\
    fi

这个build命令

docker build --no-cache --build-arg APP_BRANCH=main . --progress=plain

它成功构建,并在构建输出中显示MAIN app
这是在Ubuntu 20.04主机和Docker 23.0.1上。
如果你仍然有这个问题,请编辑你的帖子,包括一个完整的Dockerfile和你用来构建它的确切命令。

tzxcd3kk

tzxcd3kk2#

错误消息看起来像从破折号. ==是 * 非标准 * 参数到[ . =是标准的。使用[ "${APP_BRANCH}" = "main" ]

相关问题