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.