根据文档,可以为标记-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”

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


当前回答

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

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

其他回答

如果您想在构建期间使用环境变量。比如设置用户名和密码。

username= Ubuntu
password= swed24sw

Dockerfile

FROM ubuntu:16.04
ARG SMB_PASS
ARG SMB_USER
# Creates a new User
RUN useradd -ms /bin/bash $SMB_USER
# Enters the password twice.
RUN echo "$SMB_PASS\n$SMB_PASS" | smbpasswd -a $SMB_USER

终端命令

docker build——build-arg SMB_PASS=swed24sw——build-arg SMB_USER=Ubuntu。- t IMAGE_TAG

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

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

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

上面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

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

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

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