タイトルのとおり、Dockerコンテナで使用するIPを172.17.0.xから変更する方法です。
検索するとdockerToolBoxの環境でなくてLinux上のDockerについて書かれていたり、dockerのネットワークを変えていたり、バージョンによって違いがあったりするので手間取りました。
自動設定されるIP範囲を変える方法と、IPを固定で指定する方法の2種類で記事が見つかりました。今回は固定IPにする必要はないのと、設定が簡単そうなので自動設定されるIP範囲を変える方法でいきます。
参考にしたサイトは以下、など。
Dockerコンテナが使用するIPレンジを変更する – Qiita
Dockerの内部ネットワークのプライベート・アドレス帯を変更する – Qiita
–bipについては公式ドキュメントから調べて、起動オプションをどこに設定するかは自分で確認しました。
はじめは–fixed-cidrだけ指定すればよいのかと思ったのですが、どうも想定しているネットワークになりません。というわけで公式ドキュメントを確認。機械翻訳に放り込むと以下。
–bip=CIDR:標準のCIDR表記を使用して、docker0ブリッジの特定のIPアドレスとネットマスクを指定します。
例:192.168.1.5/24。
–fixed-cidr=CIDRおよび–fixed-cidr-v6=CIDRv6:標準のCIDR表記を使用して、docker0サブネットからIP範囲を制限します。たとえば、172.16.1.0/28です。この範囲は固定IPの場合は10.20.0.0/16などのIPv4範囲でなければならず、ブリッジIP範囲(docker0または-bridgeを使用して設定)のサブセットである必要があります。
たとえば、–fixed-cidr=192.168.1.0/25の場合、コンテナのIPは、192.168.1.0/24サブネットに含まれるアドレスの前半から選択されます。
上記の記事と合わせて考えると、–bipには通信用の特定のIPアドレスを記述するようです。分かり辛いのは–fixed-cidrにはbipをさらにサブネット化した狭いネットワークを指定する必要があって、しかもコンテナに割り当てられるのは。bipのネットワークである点。しかも–bipだけ指定しても動くっぽいし。。。
特に–bipがIPアドレスで、–fixed-cidrがネットワークアドレスである点に注意!–bipにネットワークアドレス書いちゃうとdockerコンテナが起動できないかと思われます
とりあえずDockerToolBox環境、Dockerは17.04.0-ceの状態では以下の対応でうまくいきました。
①Docker Quickstart Terminal起動
②仮想マシンdefaultにSSHで接続
docker-machine ssh default
③docker起動シェルを編集
sudo vi /etc/init.d/docker
とりあえず内容を見ると最後の方の以下から、start関数を呼び出している様子。
case $1 in start) start;;
でもってstart関数を見ると起動箇所は以下。
/usr/local/bin/dockerd -D -g "$DOCKER_DIR" -H unix:// $DOCKER_HOST $EXTRA_ARGS >> "DOCKER_LOGFILE" 2>&1 &
どうやらEXTRA_ARGSという変数が引数設定用っぽいので、この直前の行に以下を追記。
EXTRA_ARGS="$EXTRA_ARGS --bip=172.17.0.129/25 --fixed-cidr=172.17.0.128/26"
※–bip, –fixed-cidrの値を好きに変える
で、保存。
④docker再起動
sudo /etc/init.d/docker resatart
コンテナを起動してIPアドレスを確認すると、172.17.0.130/25になってた!
念のためコンテナをもう一つ同時に起動してみると、IPは172.17.0.131/25でした。
ただし仮想マシンdefaultの電源を落とすと、上記で加えた設定は消えてしまうようです。まあそこは運用で回避の予定。
今回のトラブルはdockerコンテナに、環境的に使用できないIPアドレスが割り振られていたために発生。対策よりも、原因まで辿り着くのが大変でした。