web-dev-qa-db-fra.com

construction de docker avec --build-arg avec plusieurs arguments

Selon documentation , il est possible de définir plusieurs arguments pour le drapeau --build-arg, mais je ne parviens pas à savoir comment. J'ai essayé ce qui suit:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 number_of_replicas=2 --no-cache .

=> Ceci renvoie une erreur.

J'ai aussi essayé:

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5,number_of_replicas=2 --no-cache .

=> Ceci définit une variable, number_of_shards, à la valeur "5, number_of_replicas = 2"

Une idée de comment je peux définir plusieurs arguments?

136
Emilien Brigand

Utilisez --build-arg avec chaque argument.

Si vous passez deux arguments, ajoutez --build-arg à chaque argument, comme suit:

docker build \
-t essearch/ess-elasticsearch:1.7.6 \
--build-arg number_of_shards=5 \
--build-arg number_of_replicas=2 \
--no-cache .
248
pl_rock

La réponse ci-dessus de pl_rock est correcte, la seule chose que je voudrais ajouter est d'attendre l'ARG à l'intérieur du fichier Dockerfile, sinon vous n'y aurez pas accès. Donc si vous faites

docker build -t essearch/ess-elasticsearch:1.7.6 --build-arg number_of_shards=5 --build-arg number_of_replicas=2 --no-cache .

Ensuite, dans le fichier Docker, vous devez ajouter

ARG number_of_replicas
ARG number_of_shards

Je rencontrais ce problème, alors j'espère pouvoir aider quelqu'un (moi-même) à l'avenir.

63
Javier Perez

Il est dommage que nous ayons également besoin de plusieurs ARG. Cela entraîne la création de plusieurs couches et ralentit la construction à cause de cela, et pour tous ceux qui s’interrogent également, actuellement il n’ya aucun moyen de définir plusieurs ARG.

8
v1adko

Si vous voulez utiliser la variable d'environnement pendant la construction. Permet de définir le nom d'utilisateur et le mot de passe.

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

Commande du terminal

docker build --build-arg SMB_PASS=swed24sw --build-arg SMB_USER=Ubuntu . -t IMAGE_TAG

4
Fakabbir Amin