docker swarm ではまったこと

Docker 1.11.2、Ubuntu14.04 で
オーバレイネットワークを構築しようとしたところ
前にやっていたのにもかかわらず いろいろな問題にぶち当たっているのでメモ。

■オーバレイネットワークを作ろうとするとエラー

root@ubuntu:~# docker -H localhost:12375 network create -d overlay test
Error response from daemon: Error response from daemon: pool configuration failed because of Unexpected response code: 413 (Value exceeds 524288 byte limit)

原因は不明。
関連すると思われる issue はいっぱい。

https://github.com/docker/compose/issues/3041
https://github.com/docker/swarm/issues/1941
https://github.com/docker/swarm/issues/1931
https://github.com/docker/swarm/issues/2290

issue1931 にあるとおり
docker service をリスタートすると作成できるようになったりします。
なぜだろう・・・orz


■ コンテナ起動時にオーバレイネットワークに所属させようとすると error creating vxlan interface
以下のエラーが出るようになってしまいた

# docker network create -d overlay test
# docker run -dP --net test --name teamcity1 moremagic/teamcity
Error response from daemon: Cannot start container <container hash>: subnet sandbox join failed for "10.0.0.0/24": error creating vxlan interface: file exists


起動時の --net オプションをやめて、自分でnetwork connect しても発生します。
また、違うコンテナを起動したときでは問題が起きなかったりします。なんでだ?

いろいろ試行錯誤したところ
overlay network を作るときに以下のように作ると問題が起きない気がします。

docker network create --opt com.docker.network.bridge.enable_icc=false -d overlay mynet

今のところ原因は不明です。
関連すると思われる issue はやっぱりいっぱい見つかります。

https://github.com/docker/libnetwork/issues/945
https://github.com/docker/libnetwork/issues/561
https://github.com/docker/libnetwork/issues/562




■謎のネットワークができている
Overlayネットワークを作成すると謎のネットワークdocker_gwbridgeが作成されます

root@ubuntu:~# docker -H localhost:12375 network ls
NETWORK ID          NAME                     DRIVER
b449f3c85844        ubuntu/bridge            bridge              
7b7c1dc48fb8        ubuntu/docker_gwbridge   bridge              
04589e18f17a        ubuntu/host              host                
47c24eef2fa0        ubuntu/none              null 

調べてみたところ オーバレイネットワークを作成すると
ノード間の通信ではこのネットワークを使用してアクセスをしているようです。

参考資料
http://techblog.ca-reward.co.jp/techblog/2016/06/post-34.html

■ コンテナをネットワークからrmしてもすぐに消えない
コンテナはstopするとネットワークから消えるようです。


■ ネットワーク設定はどこに入っているのか
/var/run/docker/netns/ あたりに格納されているようです。
ネットワークを強制的にクリアしたいときはここを消すといいかもしれません。

root@ubuntu:~# ll /var/run/docker/netns/
合計 0
drwxr-xr-x 2 root root 100  6月 29 23:55 ./
drwx------ 4 root root  80  6月 29 22:49 ../
-rw-r--r-- 1 root root   0  6月 29 23:55 1f4849962a99
-rw-r--r-- 1 root root   0  6月 29 23:54 78ef48ee7435
-rw-r--r-- 1 root root   0  6月 29 23:55 9bcc71762e2b


ネットワーク周りは詰まるとほんと大変だ・・・orz