construcción de Docker con --build-arg con múltiples argumentos

193

Según la documentación , es posible definir múltiples argumentos para la bandera --build-arg, pero no puedo averiguar cómo. Intenté lo siguiente:

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

=> Esto devuelve un error.

También probé:

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

=> Esto establece una variable number_of_shards,, en el valor "5, number_of_replicas = 2"

¿Alguna idea de cómo puedo definir múltiples argumentos?

Emilien Brigand
fuente

Respuestas:

355

Usar --build-argcon cada argumento.

Si está pasando dos argumentos, agregue --build-argcon cada argumento como:

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
fuente
62
Gracias por aclarar esto. El --helpsobre esto es especialmente engañoso: --build-arg list. ¡No es una lista!
cowlinator
91

La respuesta anterior de pl_rock es correcta, lo único que agregaría es esperar el ARG dentro del Dockerfile si no, no tendrá acceso a él. Entonces si lo estás haciendo

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

Luego, dentro del Dockerfile, debe agregar

ARG number_of_replicas
ARG number_of_shards

Me encontraba con este problema, así que espero ayudar a alguien (a mí mismo) en el futuro.

Javier Perez
fuente
66
me ayudaste también, así que gracias. Permítanme agregar solo eso que ARGSdebe declararse despuésFROM
Edoardo
66
¡Wow gracias! El uso ARGni siquiera se menciona en docs.docker.com/engine/reference/commandline/build/… y --build-argfue inútil para mí sinARG
HeyWatchThis
19

Si desea utilizar la variable de entorno durante la compilación. Digamos que configuramos nombre de usuario y contraseña.

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

Comando terminal

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

Fakabbir Amin
fuente
3
Tenga en cuenta que esto deja los valores secretos visibles en la imagen del acoplador mediante el docker historycomando.
Gary
¡a veces la única respuesta principal es votar! pero lo explicaste muy bien ¡Gracias!
Dupinder Singh
14

Es una pena que también necesitemos múltiples ARG, da como resultado múltiples capas y ralentiza la compilación debido a eso, y para cualquiera que también se pregunte eso, actualmente no hay forma de establecer múltiples ARG.

v1adko
fuente