How to set bash aliases for docker containers in Dockerfile? How to set bash aliases for docker containers in Dockerfile? bash bash

How to set bash aliases for docker containers in Dockerfile?


Basically like you always do, by adding it to the user's .bashrc:

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

As usual this will only work for interactive shells:

docker build -t test .docker run -it --rm --entrypoint /bin/bash test hi/bin/bash: hi: No such file or directorydocker run -it --rm test bash$ hihello

For non-interactive shells you should create a small script and put it in your path, i.e.:

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

If your alias uses parameters (ie. hi Jim -> hello Jim), just add "$@":

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


To create an alias of an existing command, might also use ln -s:

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


If you want to use aliases just in Dockerfile, but not inside container then the shortest way is ENV declaration:

ENV update='apt-get update -qq'ENV install='apt-get install -qq'RUN $update && $install apt-utils \    curl \    gnupg \    python3.6

And for use in container the way like already described:

 RUN printf '#!/bin/bash \n $(which apt-get) install -qq $@' > /usr/bin/install RUN chmod +x /usr/bin/install

Most of the time I use aliases just on building stage and do not go inside containers, so first example is quicker, clearer and simpler for every day use.