DockerコンテナのIPアドレスを変える方法

Pocket

タイトルのとおり、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アドレスが割り振られていたために発生。対策よりも、原因まで辿り着くのが大変でした。

広告

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です