Docker build with——build-arg带多个参数

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

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

300020 次浏览

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

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

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

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

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

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

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

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