variables - arg - ¿Cómo definir una variable en un Dockerfile?
dockerfile environment variables from host (4)
En mi Dockerfile , me gustaría definir variables que pueda usar más adelante en el Dockerfile .
ENV
instrucción
ENV
, pero no quiero que estas variables sean variables de entorno.
¿Hay alguna manera de declarar variables en el ámbito de Dockerfile ?
Para responder tu pregunta:
En mi Dockerfile, me gustaría definir variables que pueda usar más adelante en el Dockerfile.
Puede definir una variable con:
ARG myvalue=3
No se permiten espacios alrededor del carácter igual.
Y úsalo más tarde con:
RUN echo $myvalue > /test
Puede usar
ARG
: consulte
docs.docker.com/engine/reference/builder/#arg
La instrucción
ARG
define una variable que los usuarios pueden pasar en el momento de la compilación al constructor con el comando dedocker build
la--build-arg <varname>=<value>
docker build
utilizando el--build-arg <varname>=<value>
. Si un usuario especifica un argumento de compilación que no se definió en el Dockerfile, la compilación genera un error.
Que yo sepa, solo
ENV
permite, como se menciona en "
Reemplazo del entorno
"
Las variables de entorno (declaradas con la declaración
ENV
) también se pueden usar en ciertas instrucciones como variables para ser interpretadas por el Dockerfile.
Deben ser variables de entorno para volver a declararse en cada nuevo contenedor creado para cada línea del Dockerfile por la
docker build
.
En otras palabras, esas variables no se interpretan directamente en un Dockerfile, sino en un contenedor creado para una línea Dockerfile, de ahí el uso de la variable de entorno.
Este día, uso
docs.docker.com/engine/reference/builder/#arg
(
docs.docker.com/engine/reference/builder/#arg
) y
ENV
.
Usar
ARG
solo significa que su variable es visible en el momento de la compilación,
no
en el tiempo de ejecución.
Mi Dockerfile generalmente tiene:
ARG var
ENV var=${var}
En su caso,
ARG
es suficiente: lo uso típicamente para configurar la variable http_proxy, que la construcción de Docker necesita para acceder a Internet en el momento de la construcción.
Si la variable se reutiliza dentro de la misma instrucción
RUN
, uno podría simplemente establecer una variable de shell.
Realmente me gusta cómo abordaron esto con el
archivo oficial Ruby Docker
.