2016-05-17 26 views
9

我想在(centos:6)Docker容器中給我的root用戶.bashrc。但是,當我運行我的容器時,我發現.bashrc尚未找到。這可以做到嗎?如何在Docker中爲根用戶.bashrc

我的生成命令:

... 
RUN touch .bashrc 
RUN echo "iptables -t nat -A OUTPUT -d hostA -p tcp --dport 3306 -j DNAT --to hostB" >> .bashrc 
... 

我運行命令:

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

嘗試把你的兩個命令在一個'分離'CMD';'和重建/重新啓動 – user2915097

+0

所以,如果我這樣做,並運行它如果沒有運行命令的'/ bin/bash'部分,它會運行,但不會給我對容器的交互控制。 –

+0

我的意思是,當你的新鏡像被構建時,那麼'docker run -it -cap-add = NET_ADMIN mynewimage/bin/bash' – user2915097

回答

5

原來我錯誤地添加了文件。它應該是/root/.bashrc而不僅僅是.bashrc。將文件添加到正確的位置後,不需要運行命令或CMD。

構建

... 
ADD iptables /iptables 
RUN touch /root/.bashrc \ 
&& cat iptables >> /root/.bashrc 
... 

運行

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

bash的手冊頁指出.bashrc讀wheb shell是交互的。因此,如果你想要一個名爲.bashrc的bash,你需要用-i啓動bash。

看出:

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

但是,在容器中執行bash -i這樣,覆蓋入口點或CMD,所以你可能會與包裝iptables命令和你原來使用的外殼入口點好腳本成爲您的入口點/ cmd。