ルートユーザーに(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
間違ってファイルを追加していたことがわかりました。 /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
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になるシェルスクリプトで最初に使用しているエントリポイントをラップする方が適切な場合があります。