在docker build命令的--build arg中嵌套参数

在docker build命令的--build arg中嵌套参数,docker,dockerfile,Docker,Dockerfile,让我们从例子开始。 我有一个简单的Dockerfile: ARG arg1 ARG arg2 RUN echo "$arg1 $arg2" 当我调用命令时,我期望的是什么 docker build --build-arg arg1=abc --build-arg arg2=${arg1} . 是我得到了abcabc作为爆发,但是我得到了abcabc。 那么我想要的结果可能吗?我怎样才能做到这一点呢?在你的Dockerfile FROM alpine ARG arg1 ARG arg2 RUN

让我们从例子开始。 我有一个简单的Dockerfile:

ARG arg1
ARG arg2
RUN echo "$arg1 $arg2"
当我调用命令时,我期望的是什么

docker build --build-arg arg1=abc --build-arg arg2=${arg1} .
是我得到了abcabc作为爆发,但是我得到了abcabc
那么我想要的结果可能吗?我怎样才能做到这一点呢?

在你的
Dockerfile

FROM alpine
ARG arg1
ARG arg2
RUN 

echo "$arg1 ${arg2:-$arg1}"
您现在可以这样称呼它:

docker build--build arg arg1=abc--build arg arg2=。

输出:

...truncated...
Step 4/4 : RUN echo "$arg1 ${arg2:-$arg1}"
 ---> Running in e65458b9ba6e
abc abc
...truncated...
Step 4/4 : RUN echo "$arg1 ${arg2:-$arg1}"
 ---> Running in e65458b9ba6e
abc override
或者像这样:

docker build--build arg arg1=abc--build arg arg2=override.

输出:

...truncated...
Step 4/4 : RUN echo "$arg1 ${arg2:-$arg1}"
 ---> Running in e65458b9ba6e
abc abc
...truncated...
Step 4/4 : RUN echo "$arg1 ${arg2:-$arg1}"
 ---> Running in e65458b9ba6e
abc override

(旧答案)

根据你提供的一点信息。我想说:

arg1=abc; docker build --build-arg arg1=$arg1 --build-arg arg2=$arg1

应该给您想要的。

是否必须在生成时设置
arg2
,或者是否可以在Dockerfile中设置?不幸的是,它必须在生成时设置。大多数情况下,它将使用默认值,但它应该是可修改的,然后它应该允许执行类似arg2=somedata${anotherArgument}somedataIt的操作。这是一个很好的观点,但在我的情况下,它将不起作用。我会尽量提供更多的细节。在大多数情况下,将使用默认的arg1和arg2值。但是应该允许用户修改这些参数,并且用户可以从GUI进行修改,但是这些参数始终由--build arg参数传递,即使参数没有改变。因此,可能存在这样的情况:用户只更改arg1而不更改arg2,在这种情况下,arg2应该使用arg1中的值。这是非常通用的,从bash我只调用脚本,我无法设置环境变量:(@JanNowak我更新了我的答案以适应您的新参数。我不建议这样做,因为它有点隐蔽,我不知道您的团队,但我的团队在看到shell时非常害怕,更不用说看到类似这样的内容:
${arg2:-$arg1}