根据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”
知道如何定义多个参数吗?
答案 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