关于Unix:如何在dockerfile中为docker容器设置bash别名?

How to set bash aliases for docker containers in Dockerfile?

我对Docker不熟悉。我发现我们可以使用dockerfile中的env指令设置环境变量。但是如何在Dockerfile中为长命令设置bash别名呢?


基本上就像你一直做的那样,把它添加到用户的.bashrc中:

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

如果您的别名使用参数(即hi Jim->hello Jim,只需添加"$@"

1
2
3
RUN echo -e '#!/bin/bash
echo hello"$@"'
> /usr/bin/hi && \
    chmod +x /usr/bin/hi


要创建现有命令的别名,还可以使用ln -s

ln -s $(which ) /usr/bin/


  • 编辑此文件~/.bash_别名vi ~/.bash_aliases
  • 源文件~/.bash_别名source ~/.bash_aliases
  • 完成。

  • 我刚把这个添加到我的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"

    initbash_profile.sh中,它只是附加了我的自定义别名,不需要源代码.bashrc文件。

    1
    2
    # add the bash aliases
    cat /usr/sbin/bashrc_alias.sh >> ~/.bashrc

    干杯!

    另一种选择是只从容器外部使用"docker exec-it命令",只使用自己的.bashrc或.bash_配置文件(您喜欢什么)

    docker exec -it docker_app_1 bash


    如果您只想在dockerfile中使用别名,而不想在容器中使用别名,那么最短的方法是ENV声明:

    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"]

    你的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"$@"

    (快速复制/粘贴,抱歉)