2016-05-17 1 views
9

Dockerコンテナ.bashrccentos:6)にrootユーザを与えたいと思います。しかし、コンテナを走らせると、.bashrcがソースになっていないことがわかります。これはできますか?Dockerでrootの.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

試み; 'と私はそれを行うと、それを実行した場合、だから、 – user2915097

+0

を再起動/再構築runコマンドの '/ bin/bash'部分がなくても動作しますが、コンテナの対話的な制御はできません。 –

+0

新しい画像が作成されたとき、CMDが置き換えられてから実行されないようにする 'docker run -it --cap-add = NET_ADMIN mynewimage/bin/bash' – user2915097

答えて

5

私はファイルを間違って追加していました。ただ.bashrcではなく、/root/.bashrcにする必要があります。ファイルが正しい場所に追加されているため、実行コマンドやCMDは必要ありません。

`で区切られた` CMD`であなたの2つのコマンドを入れてビルド

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

実行

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

のbashのmanページには、シェルが対話型であるwheb .bashrcが読み込まれると述べています。したがって、bashを.bashrcとしたい場合は、-iを付けてbashを起動する必要があります。

それを参照してください:あなたはiptablesのコマンドをラップし、あなたが最初にシェルで使用しているエントリポイントと良いかもしれないので

[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を上書きしますあなたのエントリーポイント/ cmdになるスクリプト。

関連する問題