wake-up-neo.com

Wie setze ich Bash-Aliase für Docker-Container in Dockerfile?

Ich bin neu in Docker. Ich fand heraus, dass wir Umgebungsvariablen mithilfe der ENV-Anweisung in der Docker-Datei festlegen können. Aber wie setzt man Bash-Aliase für lange Befehle in Dockerfile?

45
np20

Grundsätzlich, wie Sie es immer tun, indem Sie es zum .bashrc Des Benutzers hinzufügen:

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

Wie üblich funktioniert dies nur für interaktive Shells:

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

Für nicht interaktive Shells sollten Sie ein kleines Skript erstellen und in Ihren Pfad einfügen, d. H .:

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

Wenn Ihr Alias ​​Parameter verwendet (dh hi Jim -> hello Jim), Fügen Sie einfach "[email protected]" Hinzu:

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

Verwenden Sie zum Erstellen eines Alias ​​eines vorhandenen Befehls möglicherweise auch ln -s:

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

12
Laurent Magnin

Wenn Sie Aliase nur in Dockerfile verwenden möchten, aber nicht im Container, ist der kürzeste Weg die ENV -Deklaration:

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

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

Und für den Einsatz im Container wie bereits beschrieben:

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

Die meiste Zeit benutze ich Aliase nur während der Bauphase und gehe nicht in Container, sodass das erste Beispiel für den täglichen Gebrauch schneller, klarer und einfacher ist.

3
Sonique

Ich habe dies gerade zu meiner app.docker-Datei hinzugefügt

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

und in der initbash_profile.sh, das nur meine benutzerdefinierten Aliase anfügt und keine .bashrc-Quelldatei benötigt.

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

ein Vergnügen gearbeitet!

Eine andere Möglichkeit ist, einfach den Befehl "docker exec -it" von außerhalb des Containers zu verwenden und einfach Ihr eigenes .bashrc oder das .bash_profile zu verwenden (was auch immer Sie bevorzugen).

z.B. docker exec -it docker_app_1 bash

1
mikoop
  1. bearbeite diese Datei ~/.bash_aliases vi ~/.bash_aliases
  2. quell diese Datei ~/.bash_aliases source ~/.bash_aliases
  3. getan.
1
Eddy Ferreira

Sie können in Ihrer Docker-Datei einen Entypoint verwenden, dieser funktioniert jedoch nicht für einen Alias:

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

Ihre entrypoint.sh

#!/bin/bash
set -e

function dev_run()
{

}

export -f dev_run

exec "[email protected]"

(Schnelles Kopieren/Einfügen, sorry)

1
Thomas Decaux