2016-05-17 7 views
9

Ich möchte meinen Root-Benutzer in einem (centos:6) Docker Container eine .bashrc geben. Jedoch, wenn ich meinen Container starte, finde ich, dass die .bashrc nicht bezogen wurde. Kann das gemacht werden?Wie zu .bashrc für root in Docker

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 Startbefehl:

docker run -it --cap-add=NET_ADMIN myImage /bin/bash 
+0

try Ihre 2-Befehle in einem 'CMD' von einem' getrennt zu setzen; 'und den Wiederaufbau/Relaunch – user2915097

+0

Also, wenn ich das tun und es laufen Ohne den '/ bin/bash'-Teil des run-Befehls läuft er, aber ich erhalte keine interaktive Kontrolle über den Container. –

+0

Ich meine, wenn Ihr neues Bild erstellt wird, dann 'Docker laufen -it - cap-add = NET_ADMIN mynewimage/bin/bash' – user2915097

Antwort

5

Es stellte sich heraus, dass ich die Datei falsch hinzufügte. Es sollte /root/.bashrc anstatt nur .bashrc sein. 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 
... 

Run

docker run -it --cap-add=NET_ADMIN myImage /bin/bash 
0

Die bash manpage besagt, dass .bashrc gelesen wird WHEB die Shell interaktiv ist. Also, wenn Sie eine Bash, die .bashrc liest, müssen Sie Bash mit -i starten.

Sehen Sie, dass:

[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]:/# 

Aber bash -i wie dies in dem Behälter ausgeführt wird, überschreibt der Einstiegspunkt oder cmd ein, so dass Sie besser sein könnte mit Einwickeln der iptables-Befehl und der Einstiegspunkt Sie verwenden in einer Schale Skript, das zu deinem Einstiegspunkt/cmd wird.