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?
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
Verwenden Sie zum Erstellen eines Alias eines vorhandenen Befehls möglicherweise auch ln -s
:
ln -s $(which <existing_command>) /usr/bin/<my_command>
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.
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
vi ~/.bash_aliases
source ~/.bash_aliases
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)