Ich möchte meinem Root-Benutzer ein (centos:6
) Docker Container ein .bashrc
. Wenn ich jedoch meinen Container starte, stelle ich fest, dass das .bashrc
wurde nicht bezogen. Kann das gemacht werden?
Mein Build-Befehl:
...
RUN touch .bashrc
RUN echo "iptables -t nat -A OUTPUT -d hostA -p tcp --dport 3306 -j DNAT --to hostB" >> .bashrc
...
Mein Befehl zum Ausführen:
docker run -it --cap-add=NET_ADMIN myImage /bin/bash
Es stellte sich heraus, dass ich die Datei falsch hinzugefügt habe. Es sollte sein /root/.bashrc
anstatt nur .bashrc
. Wenn die Datei an der richtigen Stelle hinzugefügt wurde, ist kein Ausführungsbefehl oder CMD erforderlich.
Bauen
...
ADD iptables /iptables
RUN touch /root/.bashrc \
&& cat iptables >> /root/.bashrc
...
Lauf
docker run -it --cap-add=NET_ADMIN myImage /bin/bash
Die bash manpage gibt an, dass .bashrc
Gelesen wird, wenn die Shell interaktiv ist. Wenn Sie also eine Bash mit .bashrc
Möchten, müssen Sie die Bash mit -i
Starten.
Siehst du das:
[email protected]:~# echo 'echo this is .bashrc' > /tmp/bashrc
[email protected]:~# docker run -ti -v /tmp/bashrc:/root/.bashrc debian bash -i
this is .bashrc
[email protected]:/#
Wenn Sie jedoch bash -i
Wie folgt im Container ausführen, wird der Entrypoint oder Cmd überschrieben, sodass Sie möglicherweise den Befehl iptables und den Entrypoint, den Sie ursprünglich verwenden, besser in ein Shell-Skript einschließen können, das Ihr Entrypoint/Cmd wird.