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?
risposta
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
Grazie per questo puoi fornire un esempio di shell non interattiva? Stavo cercando ENTRYPOINT e CMD per risolvere questo alias Bash – c24b
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. –
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
È 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)
Fare attenzione che alcune immagini di Docker potrebbero già sovrascrivere i punti di accesso predefiniti (ad esempio l'immagine di base di phishing). –
per creare un alias di un comando esistente, potrebbe anche utilizzare ln -s
:
ln -s $(which <existing_command>) /usr/bin/<my_command>
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? –