根据 documentation,可以为标志 --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”
知道如何定义多个参数吗?
对每个参数使用 --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
我遇到了这个问题,所以我希望将来能帮助某人(我自己)。
FROM
之后声明 ARGS
ARG
,而且如果没有 ARG
,--build-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 history
命令的 docker 映像中的机密值可见。
遗憾的是,我们也需要多个 ARG,它会导致多层并因此减慢构建速度,对于任何也想知道这一点的人来说,目前 there is no way 为每行设置多个 ARG。
如果您想从特定文件自动传递构建参数,您可以这样做:
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 .
--help
尤其具有误导性:--build-arg list
。这不是清单!"docker build" requires exactly 1 argument.