DockerネットワークのホストOS側のIPアドレスは、デフォルトでは「172.17.42.1/16」のIPアドレス(bridge IPアドレス)が割り当てられます。
(※追記: Docker1.11.2で試したところ、172.17.42.1ではなく、172.17.0.1/16のIPアドレスとなりましたでした。)
この物語は、そのIPアドレスを変更したく、Dockerトーシローとして悪戦苦闘し、何度も何度も困難に立ち向かった(ただ無知なだけという話もあるが)戦いの記録である・・・(TVドラマ『スクール☆ウォーズ』のイントロ風に読んでください)。
検証1
- CentOS 6.7
- Docker 1.7.1
(1) Dockerネットワーク現状確認
まずは、Docker起動中のネットワークを確認。
$ ifconfig docker0 Link encap:Ethernet HWaddr xx:xx:xx:xx:xx:xx inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: xxxx::xxxx:xxxx:xxxx:xxxx/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:164998 errors:0 dropped:0 overruns:0 frame:0 TX packets:200582 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:219239813 (209.0 MiB) TX bytes:153663854 (146.5 MiB) : $ route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface link-local * 255.255.0.0 U 1002 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 172.17.0.0 * 255.255.0.0 U 0 0 0 docker0 <<<<<<<<<<<<
確かに、172.17.0.0/16のネットワークが構成されています。
(2) Docker起動時のbipアドレスの設定
- 初期 bipアドレスを「192.168.100.1/24」へ変更する設定例は、下記の通りです。
Docker停止
# service docker stop docker を停止中: [ OK ]
「/etc/sysconfig/docker」を編集
# vim /etc/sysconfig/docker # # Other arguments to pass to the docker daemon process # These will be parsed by the sysv initscript and appended # to the arguments list passed to docker -d other_args="--bip=192.168.100.1/24" <-- 編集
(3) Docker起動
# service docker start Starting docker: [ OK ] # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.100.0 * 255.255.255.0 U 0 0 0 docker0 <<<<<< link-local * 255.255.255.0 U 1002 0 0 eth0 192.168.1.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
Serverを再起動しても、bipは指定した通りに起動してくれました!
検証2
- CentOS 7.2
- Docker 1.12.0
(1) Dockerネットワーク現状確認
# ip addr show : 4: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:3aff:fef8:662/64 scope link valid_lft forever preferred_lft forever
(2) Docker起動時のbipアドレスの設定
- 検証1と同じく、初期 bipアドレスを「192.168.100.1/24」へ変更します。
Docker停止
# systemctl stop docker
「/usr/lib/systemd/system/docker.service」を編集
# vim /usr/lib/systemd/system/docker.service : ExecStart=/usr/bin/dockerd // before ExecStart=/usr/bin/dockerd --bip=192.168.100.1/24 // after
(3) Docker起動
# systemctl daemon-reload # systemctl start docker # ifconfig docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 inet 192.168.100.1 netmask 255.255.255.0 broadcast 0.0.0.0 ether xx:xx:xx:xx:xx:xx txqueuelen 0 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
こちらも、Serverを再起動しても、bipは指定した通りに起動してくれました!
今回は、かなりハマってしまいました。。。
ブリッジIPアドレスの認識も甘く、自分でbipのインタフェースの設定ファイルを作ったり、「brctl addbr」コマンドでブリッジを作成してしまったりと、うまく制御させることができませんでした・・・。
結果、サービスの起動ファイルにOPTIONを付加するというシンプルな形に落ち着きました。
今回もまた、「基本を知れ!」という教訓を得ることとなりましたとさ。