2015-07-03 16 views
34

Sto lavorando a un'attività che comporta la creazione di un'immagine docker con centOs come base utilizzando un file Docker . Uno dei passaggi all'interno del file docker richiede http_proxy e https_proxy variabili ENV da impostare per funzionare dietro il proxy.È possibile passare le variabili ENV tramite la linea cmd mentre si costruisce un'immagine docker tramite il file docker?

Poiché questo Dockerfile verrà utilizzato da più team con proxy diversi, desidero evitare di dover modificare il Dockerfile per ogni team. Invece sto cercando una soluzione che mi permetta di passare le variabili ENV al momento della compilazione, ad esempio,

sudo docker build -e http_proxy = somevalue.

Non sono sicuro se esiste già un'opzione che fornisce questo. Mi sto perdendo qualcosa?

+0

qual è il problema con il passare quelli in fase di esecuzione? Qualcosa come 'docker run -e http_proxy http://1.2.3.4:3128 -e https_proxy 1.2.3.4: 3129'? Il documento di 'docker run 'http://docs.docker.com/reference/commandline/run/ – user2915097

+1

Il problema è che uno dei passaggi all'interno del file docker invade l'installazione yum e fallisce se non si imposta l'http/https ENV variabili e senza installazione corretta non riesco a costruire l'immagine .so ** finestra mobile run ** non mi aiuta qui. – anired

+0

Ho paura di dover costruire immagini specifiche, l'unica differenza è che i valori di http_proxy (s) ONBUILD possono aiutare, ma temo che non sia adatto qui, vedere il documento https://docs.docker.com/ riferimento/costruttore/ – user2915097

risposta

57

I contenitori possono essere creati utilizzando build arguments (in Docker 1.9+) che funzionano come variabili di ambiente.

Ecco il metodo:

FROM php:7.0-fpm 
ARG APP_ENV=local 
ENV APP_ENV ${APP_ENV} 
RUN cd /usr/local/etc/php && ln -sf php.ini-${APP_ENV} php.ini 

e poi costruire un contenitore di produzione:

docker build --build-arg APP_ENV=prod .

Per il vostro problema particolare:

FROM debian 
ENV http_proxy ${http_proxy} 

e quindi eseguire:

docker build --build-arg http_proxy=10.11.24.31 .

Si noti che se si costruisce vostri contenitori con docker-compose, è possibile specify these build-args in the docker-compose.yml file, ma non sulla riga di comando. Tuttavia, è possibile utilizzare variable substitution in the docker-compose.yml file, which uses environment variables.

+1

Funziona solo sulla finestra mobile 1.9+ – zengr

+4

Perché non ho notato: è necessario ARG per indicare alla finestra mobile che è possibile passare un argomento di build al builder. Senza specificare ARG non funziona. –

+1

Questo 'ENV APP_ENV $ {APP_ENV}' non è necessario. È sufficiente avere 'ARG APP_ENV' senza' = local' e afferra l'argomento build e lo usa come qualsiasi variabile impostata da 'ENV' – ElmoVanKielmo

0

Ho affrontato la stessa situazione.

Secondo la risposta piuttosto la soluzione di sin30 sta utilizzando shell,

CMD ["sh", "-c", "cd /usr/local/etc/php && ln -sf php.ini-$APP_ENV php.ini"] 
Problemi correlati