2015-03-25 22 views
10

Avere il file seguente finestra mobile-composizione:Usa finestra mobile-comporre variabile ENV in Dockerbuild il file

db: 
    build: . 
    environment: 
     - MYSQL_ROOT_PASSWORD=password 
     - ENV=test 
    env_file: .env 

Esiste un modo per utilizzare le variabili env dichiarate in finestra mobile-compose.yml (sia come ambiente o dichiarati in the env_file) come parte di Dockerfile senza dichiararli nel Dockerfile? Qualcosa del genere:

FROM java:7 
ADD ${ENV}/data.xml /data/ 
CMD ["run.sh"] 
+0

che sarebbe davvero utile. – Greg

+0

No, questo non è possibile. Sarebbe molto simile a questa domanda sull'utilizzo di variabili di ambiente dall'host: http://stackoverflow.com/questions/27925006/using-host-environment-variables-with-dockerfile –

+0

Capito, grazie. – ecyshor

risposta

4

Questo approccio va contro la teoria "Costruisci una volta, vai ovunque dietro Docker e la maggior parte degli approcci DevOps. Con questo approccio dovrai creare un contenitore per ogni ambiente che prevedi di utilizzare. In questo modo non puoi dire con certezza se un contenitore funziona nell'ambiente dev funzionerà in fase di staging e produzione poiché non stai utilizzando lo stesso contenitore.

Sarebbe meglio aggiungere tutti i file di configurazione necessari sul contenitore e scrivere uno script entrypoint che seleziona/copia i dati per quell'ambiente nella posizione corretta all'avvio del contenitore. È inoltre possibile applicare questo metodo ad altri config sul contenitore, come su modelli di configurazione di Apache utilizzando i modelli Jinja2 ecc

7

Anche se questa domanda è stato chiesto molto tempo fa, c'è una risposta a una domanda simile qui: Pass environment variables from docker-compose to container at build stage

Fondamentalmente , utilizzare variabili al momento della compilazione del contenitore si deve definire la variabile in docker-compose.yml:

build: 
    context: . 
    args: 
    MYSQL_ROOT_PASSWORD: password 
    ENV: test 

e quindi fare riferimento nella Dockerfile utilizzando ARG:

ARG MYSQL_ROOT_PASSWORD 
ARG ENV 
ADD ${ENV}/data.xml /data/ 

Per quanto riguarda le variabili di ambiente definite in un file *.env, credo che non possano essere passati al contenitore in fase di compilazione.

+0

Grazie! Questo e 'esattamente quello che stavo cercando. –

+0

Questi 'args' possono essere definiti in' env_file: .env' al posto di docker-compose ed essere riconosciuti in Dockefile in un modo simile al suddetto? – JavaSa

Problemi correlati