Ho una funzione di bash nvm
definita in /root/.profile
. docker build
non è riuscito a trovare quella funzione quando la chiamo nel passaggio RUN
.Come eseguire la funzione bash in Dockerfile
RUN apt-get install -y curl build-essential libssl-dev && \
curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh
RUN nvm install 0.12 && \
nvm alias default 0.12 && \
nvm use 0.12
L'errore è
Step 5 : RUN nvm install 0.12
---> Running in b639c2bf60c0
/bin/sh: nvm: command not found
sono riuscito a chiamare nvm
avvolgendolo con bash -ic
, che caricherà /root/.profile
.
RUN bash -ic "nvm install 0.12" && \
bash -ic "nvm alias default 0.12" && \
bash -ic "nvm use 0.12"
Il metodo di cui sopra funziona bene, ma ha un avvertimento
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
E voglio sapere c'è un modo più semplice e più pulito per chiamare la funzione bash direttamente come è binario normale senza l'bash -ic
wrapping? Forse qualcosa di simile
RUN load_functions && \
nvm install 0.12 && \
nvm alias default 0.12 && \
nvm use 0.12
nvm 'RUN bash -c' install 0.12 && nvm alias predefinito 0,12 && nvm uso 0.12'' dovrebbe fare il trucco. Per te funziona? (Non sono sicuro al 100% perché non so come il tuo contenitore sta guardando in dettaglio) – hek2mgl
Funziona bene. Ma sto cercando una soluzione migliore. – Quanlong
Ok, controlla la mia risposta. Uno script di shell è il modo più pulito per farlo. – hek2mgl