使用带有多个参数的--build-arg构建docker

时间:2017-02-17 11:57:45

标签: docker build arguments

根据documentation,可以为标志--build-arg定义多个args,但我无法找到方法。我尝试了以下方法:

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”

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

5 个答案:

答案 0 :(得分:218)

对每个参数使用--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 .

答案 1 :(得分:57)

pl_rock的上述答案是正确的,我唯一要补充的是期待Docker文件中的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

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

答案 2 :(得分:7)

令人遗憾的是,我们也需要多个ARG,它会导致多个层次并因此减慢构建速度,并且对于任何人也想知道,目前there is no way设置多个ARG。

答案 3 :(得分:3)

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

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

答案 4 :(得分:1)

如果要在构建过程中使用环境变量。可以说设置用户名和密码。

std::swap(b1, b2);

Dockerfile

username= Ubuntu
password= swed24sw

终端命令

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