2015-11-26 12 views
41

Nel mio Dockerfile, vorrei definire le variabili che posso uso successivo nel Dockerfile.Come definire una variabile in un Dockerfile?

Sono a conoscenza dell'istruzione ENV, ma non voglio che queste variabili siano variabili di ambiente.

C'è un modo per dichiarare le variabili in ambito Dockerfile?

+7

è possibile utilizzare ARG - vedere https://docs.docker.com/engine/reference/builder/#arg – lumos0815

+0

@ lumos0815, penso che si dovrebbe post che come la tua risposta (anche se è un vecchio post; per i posteri) poiché questo è esattamente ciò che l'OP sta chiedendo. – shriek

risposta

34

È possibile utilizzare ARG - vedere https://docs.docker.com/engine/reference/builder/#arg

L'istruzione ARG definisce una variabile che gli utenti possono passare a accumulo di tempo per il costruttore con il comando docker build utilizzando il flag --build-arg <varname>=<value>. Se un utente specifica un argomento build non definito nel file Docker, il build genera un errore .

21

A mia conoscenza, solo ENV permette che, come indicato nella sezione "Environment replacement" Variabili

Ambiente (dichiarata con l'istruzione ENV) può essere utilizzato anche in alcune istruzioni come variabili per essere interpretati dalla Dockerfile.

devono essere variabili ambiente al fine di essere dichiarato nuovamente in ogni nuova contenitori creati per ogni riga del Dockerfile da docker build.

In altre parole, tali variabili non vengono interpretate direttamente in un Dockerfile, ma in un contenitore creato per una linea Dockerfile, quindi l'uso della variabile di ambiente.


Questo giorno, io uso sia ARG (docker 1.10+, and docker build --build-arg var=value) e ENV.
L'utilizzo di ARG da solo indica che la variabile è visibile al momento della compilazione, non in fase di esecuzione.

mio Dockerfile di solito ha:

ARG var 
ENV var=${var} 

Nel tuo caso, ARG basta: lo uso in genere per l'impostazione http_proxy variabile, che costruiscono finestra mobile ha bisogno per l'accesso a internet in fase di compilazione.

6

Se la variabile viene riutilizzata all'interno della stessa istruzione RUN, è possibile semplicemente impostare una variabile di shell. Mi piace molto il modo in cui si sono avvicinati a questo con lo official Ruby Dockerfile.