带有--build-arg和多个参数的docker build


192

根据文档,可以为该标志定义多个args --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”

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

Answers:


355

--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 .

62
感谢您清理此问题。在--help这个特别的误导:--build-arg list。这不是清单!
cowlinator

91

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

我遇到了这个问题,所以希望以后能对某人(自己)有所帮助。


6
您也帮助了我,谢谢。我要补充一点,即ARGS在之后必须声明的内容FROM
Edoardo

6
哇谢谢!使用ARG甚至没有提及docs.docker.com/engine/reference/commandline/build/...--build-arg没用,我不ARG
HeyWatchThis

19

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

username= Ubuntu
password= swed24sw

Docker文件

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


3
请注意,这会使使用docker history命令在Docker映像中显示秘密值。
加里

有时唯一的最高答案是最高!但是你解释得很好。谢谢!
Dupinder Singh

13

很可惜我们也需要多个ARG,它会导致多层,并因此而降低构建速度,对于任何人也想知道的是,目前无法设置多个ARG。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.