根据文档,可以为标记-build-arg定义多个参数,但我不知道如何定义。我尝试了以下方法:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 number_of_replicas=2 --no-cache .

=>返回一个错误。

我还试过:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5,number_of_replicas=2 --no-cache .

这将设置一个变量number_of_shards的值为“5,number_of_replicas=2”

知道如何定义多个参数吗?


当前回答

如果你想从一个特定的文件自动传递构建参数,你可以这样做:

docker build  $(cat .my-env-file-name | while read line; do out+="--build-arg $line"; done; echo $out; out="") .

其他回答

对每个参数使用——build-arg。

如果你要传递两个参数,那么在每个参数中添加——build-arg,如下所示:

docker build \
-t essearch/ess-elasticsearch:1.7.6 \
--build-arg number_of_shards=5 \
--build-arg number_of_replicas=2 \
--no-cache .

使用xargs从文件中传入构建参数的方法如下:

cat .MY_ENV_FILE | xargs printf -- '--build-arg %s\n' | xargs docker build -t MY_TAG .

如果你想从一个特定的文件自动传递构建参数,你可以这样做:

docker build  $(cat .my-env-file-name | while read line; do out+="--build-arg $line"; done; echo $out; out="") .

上面pl_rock的答案是正确的,我唯一要补充的是,在Dockerfile中期望ARG,如果不是,你将无法访问它。所以如果你在做

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 --build-arg number_of_replicas=2 --no-cache .

然后在Dockerfile中添加

ARG number_of_replicas
ARG number_of_shards

我遇到了这个问题,所以我希望将来能帮助别人(我自己)。

遗憾的是,我们也需要多个ARG,这导致了多层,并因此减慢了构建速度,对于那些也想知道这一点的人来说,目前没有办法在每行设置多个ARG。