web-dev-qa-db-ja.com

Dockerでルートを.bashrcする方法

ルートユーザーに(centos:6)Dockerコンテナa .bashrc。ただし、コンテナを実行すると、.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
20
Matthew Herbst

間違ってファイルを追加していたことがわかりました。 /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
21
Matthew Herbst

bash manpage は、シェルが対話型のときに.bashrcが読み取られることを示しています。したがって、.bashrcを読み取るbashが必要な場合は、-iでbashを起動する必要があります。

それを見てください:

root@Host:~# echo 'echo this is .bashrc' > /tmp/bashrc
root@Host:~# docker run -ti -v /tmp/bashrc:/root/.bashrc debian bash -i 
this is .bashrc
root@01da3a7e9594:/#

ただし、コンテナでbash -iを実行すると、エントリポイントまたはcmdがオーバーライドされるため、iptablesコマンドと、エントリポイント/ cmdになるシェルスクリプトで最初に使用しているエントリポイントをラップする方が適切な場合があります。

3
user801247