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?

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 .

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.


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


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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.