webentwicklung-frage-antwort-db.com.de

Gewusst wie: .bashrc für root in Docker

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
20
Matthew Herbst

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
21
Matthew Herbst

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.

3
user801247