Docker v1.9 o più recente
Se si utilizza Docker v1.9 o più recente, questo è possibile tramite il supporto per gli argomenti del tempo di costruzione. Gli argomenti sono dichiarati nello Dockerfile
entro il using the ARG statement.
ARG REQUIRED_ARGUMENT
ARG OPTIONAL_ARGUMENT=default_value
Quando in seguito realmente costruire la vostra immagine utilizzando docker build
è possibile passare argomenti tramite la bandiera --build-arg
come descritto nella docker docs.
$ docker build --build-arg REQUIRED_ARGUMENT=this-is-required .
Si prega di notare che si tratta di non raccomanda di utilizzare le variabili di generazione in tempo per le password o segreti, come chiavi o credenziali.
Inoltre, le variabili di build possono avere great impact on caching. Pertanto il Dockerfile dovrebbe essere costruito con grande cura per poter utilizzare il caching il più possibile e in questo modo accelerare il processo di costruzione.
Modifica: la "finestra mobile nuova di v1.9" è stata aggiunta dopo l'immissione da leedm777:s answer.
Docker prima v1.9
Se si utilizza una finestra mobile-versione prima di 1.9, l'approccio ARG
/--build-arg
non era possibile. Non è stato possibile risolvere questo tipo di informazioni durante la compilazione, quindi è necessario passarle come parametri al comando docker run
.
Docker immagini devono essere coerenti nel tempo mentre i contenitori possono essere modificati e considerati come "processi di espulsione".
La vecchia soluzione a questo problema è stato quello di utilizzare template. Questa non è una soluzione chiara ma era una delle pochissime opzioni praticabili al momento. (Ispirazione da this discussion).
- salvare tutti i dati dinamici in un file JSON o YAML
- creare un file di finestra mobile "modello" in cui la dinamica può essere successivamente ampliato
- scrivere uno script che crea un Dockerfile dai dati di configurazione utilizzando alcuni libreria di template che si ha familiarità con
Quando si desidera eseguire './Script/that/gets/var'? I file Docker sono per il tempo di costruzione. Se vuoi che qualcosa venga eseguito al momento dell'avvio del contenitore, basta creare uno script che esegua './Script/that/gets/var' e quindi il comando principale. – generalhenry
Voglio che venga eseguito al momento della compilazione e crei variabili di ambiente che saranno presenti in fase di esecuzione. – Evan