2016-04-03 21 views
21

Sono nuovo alla finestra mobile. Ho scoperto che siamo in grado di impostare variabili d'ambiente utilizzando l'istruzione ENV nel Dockerfile. Ma come si impostano gli alias bash per i comandi lunghi in Dockerfile?Come impostare gli alias bash per i contenitori docker in Dockerfile?

+0

alias sono stati considerati essenzialmente deprecato per un * molto * tempo. Usa una funzione. Non è più necessario * mai * usare un alias. Com'è possibile che questi approcci dalla fine degli anni '80 persistano così a lungo? –

risposta

38

Fondamentalmente come fai sempre, aggiungendolo al dell'utente .bashrc:

FROM foo 
RUN echo 'alias hi="echo hello"' >> ~/.bashrc 

Come al solito questo funziona solo per le shell interattive:

docker build -t test . 
docker run -it --rm --entrypoint /bin/bash test hi 
/bin/bash: hi: No such file or directory 
docker run -it --rm test bash 
$ hi 
hello 

Per shell non interattive si dovrebbe creare un piccolo script e mettilo nel tuo percorso, ad esempio:

RUN echo -e '#!/bin/bash\necho hello' > /usr/bin/hi && \ 
    chmod +x /usr/bin/hi 

Se il tuo alias ci es parametri (es. hi Jim ->hello Jim), basta aggiungere "[email protected]":

RUN echo -e '#!/bin/bash\necho hello "[email protected]"' > /usr/bin/hi && \ 
    chmod +x /usr/bin/hi 
+0

Grazie per questo puoi fornire un esempio di shell non interattiva? Stavo cercando ENTRYPOINT e CMD per risolvere questo alias Bash – c24b

+3

che funziona solo in shell interattive. Basta creare un piccolo script di shell e inserire il tuo percorso, lo stesso effetto di un alias. Aggiornato la risposta con un semplice esempio. –

+0

Nota: da https://stackoverflow.com/a/8467449 è preferibile utilizzare ** printf ** anziché * echo * per garantire un comportamento più coerente. Così printf '#!/Bin/bash \ Neco ciao'>/usr/bin/hi chmod + x/usr/bin/hi – barraq

-1

È possibile utilizzare entrypoint, ma non funzionerà per Alias, nella vostra Dockerfile:

ADD dev/entrypoint.sh /opt/entrypoint.sh 
ENTRYPOINT ["/opt/entrypoint.sh"] 

tuo entrypoint.sh

#!/bin/bash 
set -e 

function dev_run() 
{ 

} 

export -f dev_run 

exec "[email protected]" 

(Copia/incolla veloce, spiacente)

+0

Fare attenzione che alcune immagini di Docker potrebbero già sovrascrivere i punti di accesso predefiniti (ad esempio l'immagine di base di phishing). –

2

per creare un alias di un comando esistente, potrebbe anche utilizzare ln -s:

ln -s $(which <existing_command>) /usr/bin/<my_command>

Problemi correlati