How to set bash aliases for docker containers in Dockerfile?
我对Docker不熟悉。我发现我们可以使用dockerfile中的env指令设置环境变量。但是如何在Dockerfile中为长命令设置bash别名呢?
基本上就像你一直做的那样,把它添加到用户的
1 2 | FROM foo RUN echo 'alias hi="echo hello"' >> ~/.bashrc |
与往常一样,这只适用于交互式shell:
1 2 3 4 5 6 | 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,您应该创建一个小脚本并将其放到您的路径中,即:
1 2 3 | RUN echo -e '#!/bin/bash echo hello' > /usr/bin/hi && \ chmod +x /usr/bin/hi |
如果您的别名使用参数(即
1 2 3 | RUN echo -e '#!/bin/bash echo hello"$@"' > /usr/bin/hi && \ chmod +x /usr/bin/hi |
要创建现有命令的别名,还可以使用
我刚把这个添加到我的app.dockerfile中
1 2 3 4 5 | # setup aliases ADD ./bashrc_alias.sh /usr/sbin/bashrc_alias.sh ADD ./initbash_profile.sh /usr/sbin/initbash_profile RUN chmod +x /usr/sbin/initbash_profile RUN /bin/bash -C"/usr/sbin/initbash_profile" |
在
1 2 | # add the bash aliases cat /usr/sbin/bashrc_alias.sh >> ~/.bashrc |
干杯!
另一种选择是只从容器外部使用"docker exec-it命令",只使用自己的.bashrc或.bash_配置文件(您喜欢什么)
如
如果您只想在dockerfile中使用别名,而不想在容器中使用别名,那么最短的方法是
1 2 3 4 5 6 7 | ENV update='apt-get update -qq' ENV install='apt-get install -qq' RUN $update && $install apt-utils \ curl \ gnupg \ python3.6 |
在容器中使用,如前所述:
1 2 3 | RUN printf '#!/bin/bash $(which apt-get) install -qq $@' > /usr/bin/install RUN chmod +x /usr/bin/install |
大多数时候,我只是在构建阶段使用别名,而不将其放在容器中,所以第一个示例对于每天的使用来说更快、更清晰和更简单。
您可以在dockerfile中使用entrypoint,但它对alias不起作用:
1 2 | ADD dev/entrypoint.sh /opt/entrypoint.sh ENTRYPOINT ["/opt/entrypoint.sh"] |
你的
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash set -e function dev_run() { } export -f dev_run exec"$@" |
(快速复制/粘贴,抱歉)