web-dev-qa-db-fra.com

Comment définir des alias bash pour les conteneurs Docker dans Dockerfile?

Je suis nouveau au docker. J'ai constaté que nous pouvons définir des variables d'environnement à l'aide de l'instruction ENV dans le fichier Docker. Mais comment définir des alias bash pour de longues commandes dans Dockerfile?

45
np20

Fondamentalement, comme vous le faites toujours, en l'ajoutant à l'utilisateur .bashrc:

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

Comme d'habitude, cela ne fonctionnera que pour les shells interactifs:

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

Pour les shells non interactifs, vous devez créer un petit script et le placer sur votre chemin, c'est-à-dire:

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

Si votre alias utilise des paramètres (ie. hi Jim -> hello Jim), Ajoutez simplement "$@":

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

Pour créer un alias d'une commande existante, vous pouvez également utiliser ln -s:

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

12
Laurent Magnin

Si vous voulez utiliser des alias uniquement dans Dockerfile, mais pas à l'intérieur d'un conteneur, le plus court chemin est ENV déclaration:

ENV update='apt-get update -qq'
ENV install='apt-get install -qq'

RUN $update && $install apt-utils \
    curl \
    gnupg \
    python3.6

Et pour une utilisation en conteneur comme décrit précédemment:

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

La plupart du temps, j'utilise des alias juste au stade de la construction et n'entre pas dans les conteneurs. Le premier exemple est donc plus rapide, plus clair et plus simple pour une utilisation quotidienne.

3
Sonique

Je viens d'ajouter ceci à mon app.dockerfile

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

et à l'intérieur du initbash_profile.sh qui ajoute simplement mes alias personnalisés et ne nécessite pas de créer le fichier .bashrc.

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

travaillé un régal!

Une autre option consiste simplement à utiliser la "commande docker exec -it" de l'extérieur du conteneur et à utiliser votre propre fichier .bashrc ou .bash_profile (celui que vous préférez).

par exemple. docker exec -it docker_app_1 bash

1
mikoop
  1. édite ce fichier ~/.bash_aliases vi ~/.bash_aliases
  2. source ce fichier ~/.bash_aliases source ~/.bash_aliases
  3. terminé.
1
Eddy Ferreira

Vous pouvez utiliser entrypoint, mais cela ne fonctionnera pas pour un alias dans votre fichier Docker:

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

Votre entrypoint.sh

#!/bin/bash
set -e

function dev_run()
{

}

export -f dev_run

exec "$@"

(Copier/coller rapide, désolé)

1
Thomas Decaux