2016-04-03 13 views
21

Jestem nowy w dockingu. Odkryłem, że możemy ustawić zmienne środowiskowe za pomocą instrukcji ENV w pliku Dockerfile. Ale w jaki sposób można ustawić alias bash dla długich poleceń w Dockerfile?Jak ustawić aliasy bash dla kontenerów doków w pliku Dockerfile?

+0

pseudonimy zostały uznane za przestarzałe zasadniczo * bardzo * długi czas. Użyj funkcji. Nie ma już potrzeby * kiedykolwiek * używać aliasu. Jak to się dzieje, że te podejścia z końca lat 80. utrzymują się tak długo? –

Odpowiedz

38

zasadzie jak zawsze, dodając go do użytkownika .bashrc:

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

Jak zwykle to będzie działać tylko dla powłok interaktywnych:

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 

Dla nieinterakcyjnych powłok należy stworzyć mały skrypt i umieścić go na swojej ścieżce, tj .:

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

Jeśli twój alias nam Parametry es (np. hi Jim ->hello Jim), wystarczy dodać "[email protected]":

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

Dzięki temu możesz podać przykład nieinteraktywnej powłoki? Szukałem ENTRYPOINT i CMD, aby rozwiązać ten – c24b

+3

Alias ​​Bash działa tylko w powłokach interaktywnych. Po prostu utwórz mały skrypt powłoki i umieść na swojej ścieżce taki sam efekt jak alias. Zaktualizowano odpowiedź za pomocą prostego przykładu. –

+0

Uwaga: od https://stackoverflow.com/a/8467449 powinieneś raczej użyć ** printf ** zamiast * echo *, aby zapewnić bardziej spójne zachowanie. Tak printf '#!/Bin/bash \ necho cześć ">/usr/bin/hi chmod + x/usr/bin/hi – barraq

-1

Można użyć punkt_wejścia, ale to nie będzie działać dla aliasu, w Dockerfile:

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

Twój entrypoint.sh

#!/bin/bash 
set -e 

function dev_run() 
{ 

} 

export -f dev_run 

exec "[email protected]" 

(Szybki kopiuj/wklej, przepraszam)

+0

Zwróć uwagę, że niektóre obrazy Docker mogły już zastąpić domyślny punkt wejścia (taki jak obraz podstawowy fuzji). –

2

Aby utworzyć alias istniejącego polecenia, może także używać ln -s:

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

Powiązane problemy