2016-04-03 167 views
21

我是碼頭工人。我發現我們可以在Dockerfile中使用ENV指令設置環境變量。但是如何在Dockerfile中爲長命令設置bash別名?如何在Dockerfile中設置Docker容器的bash別名?

+0

別名被認爲基本上棄用了* *很長的時間。使用功能。不再需要*使用別名。這些從80年代末開始的方法如何持續這麼久? –

回答

38

基本上像你總是這樣,通過將其添加到用戶的.bashrc

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

像往常一樣,這隻能在交互shell工作:

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 

對於你應該建立非交互shell一個小腳本,並把它放在你的路徑,即:

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

如果你的別名我們es參數(即。 hi Jim - >hello Jim),只需添加"[email protected]"

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

感謝您能否提供非交互式shell的示例?我在尋找ENTRYPOINT和CMD來解決這個問題。 – c24b

+3

Bash別名只能在交互式shell中使用。只需創建一個小的shell腳本並放入你的路徑中,效果與別名相同。用一個簡單的例子更新答案。 –

+0

注意:從https://stackoverflow.com/a/8467449您應該使用** printf **而不是* echo *來確保更一致的行爲。 所以 printf'#!/ bin/bash \ necho hello'>/usr/bin/hi chmod + x/usr/bin/hi – barraq

-1

您可以使用入口點,但它不會別名工作,在您的Dockerfile:

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

entrypoint.sh

#!/bin/bash 
set -e 

function dev_run() 
{ 

} 

export -f dev_run 

exec "[email protected]" 

(快速複製/粘貼,對不起)

+0

請注意,某些Docker映像可能已經覆蓋默認入口點(例如phusion基礎映像)。 –

2

要創建現有命令的別名,也可以使用ln -s

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

相關問題