2016-04-03 72 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>

相关问题