Ho un'applicazione Dockerised che vorrei eseguire in ambienti host proxy e non proxy. Sto cercando di risolvere questo problema copiando le normali variabili di ambiente, come http_proxy, nei contenitori se e solo se esistono nell'host.Come rendere disponibili le variabili ambientali per i comandi di Docker RUN da docker-compose?
posso ottenere il 90% della strada c'è eseguendo
set | grep -i _proxy=>proxies.env
in uno script di alto livello, e poi avere, nella mia finestra mobile-compose.yml:
myserver:
build: ./myserver
env_file:
- proxies.env
Questo copia le eventuali variabili del proxy ambientale dell'host nel contenitore del server e funziona nel senso che queste variabili sono disponibili in fase di esecuzione del contenitore, in altre parole dallo stadio in cui vengono eseguiti il file Dockerfile CMD o ENTRYPOINT.
Tuttavia, ho un contenitore che deve eseguire npm come passo di costruzione, ovvero da un comando RUN nel Dockerfile, e queste variabili non sembrano essere presenti in questa fase, quindi npm non riesce a trovare il proxy e si blocca . In altri lavori, se ho
RUN set
nel mio Dockerfile, non riesco a vedere alcuna variabile da proxies.env, ma se lo faccio
docker exec -it myserver /bin/bash
e poi correre insieme, posso vedere tutto da proxies.env.
Qualcuno può consigliare un modo per rendere queste variabili visibili al momento della compilazione del contenitore, senza doverli codificare manualmente, in modo che il mio docker-compose.yml e Dockerfile funzionino ancora sia per gli host con proxy che per gli host senza proxy?
(Running with CentOS 7, finestra mobile-comporre 1.3.1 e finestra mobile 1.7.0)
Generare il file docker con le variabili env predefinite sembra il modo più semplice per me. –
Potresti avere ragione. In assenza di un suggerimento migliore, metterò insieme uno script di shell che userà sed per popolare o commentare le impostazioni di codifica NPM hard-coded, così posso usare lo stesso Dockerfile sia per gli host cloud che per quelli aziendali. Aggiornamento –
: con 'docker-compose.yml' versione 2 (finestra mobile 1.10+), ora avete un'opzione migliore:' build:/args: '. Vedi [la mia risposta sotto] (http://stackoverflow.com/a/36084324/6309) – VonC