Composeで作成されるネットワーク

Dockerにおいて表題の件についてメモ。

■ 環境

  • Docker 1.10.3
  • Docker Machine 0.6.0
  • Docker Compsoe 1.6.2
  • Mac OSX El Capitan

■ ネットワーク

Composeで起動したコンテナに見慣れないログが出ていた。

$ docker-compose up -d
Creating network "beat_default" with the default driver
Creating elasticsearch
Creating kibana
$ docker network ls

`docker-compose.yml`ではネットワークの設定を何もしていないのだが、ネットワークを勝手に作成しているようだ。またネットワークの名称は作業ディレクトリに”_default“が付けられている。

$ docker network ls
NETWORK ID          NAME                DRIVER
57690bbfada1        host                host
beed7829864c        beat_default        bridge
1460bebe2d7f        bridge              bridge
329123ebfee2        none                null
$

作成したコンテナは本当に作成されたネットワークにいるのだろうか?確認。

$ docker network inspect beat_default
[
    {
        "Name": "beat_default",
        "Id": "beed7829864c44191dc8f1a7c89c8ec54a82e9076859ed06513707f22b1325ae",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1/16"
                }
            ]
        },
        "Containers": {
            "7fd67d9c5f0b45699a8f484591cbba5dadbbcbb39e14544c876e4ff79cf62966": {
                "Name": "elasticsearch",
                "EndpointID": "d2d48ccc63a24300121c7e52b3aee0b6092f06f4bc197c09b66bad8987d65879",
                "MacAddress": "02:42:ac:12:00:02",
                "IPv4Address": "172.18.0.2/16",
                "IPv6Address": ""
            },
            "966a2efd4730420f0aecb21ff50dbb12111dbf0815aef817f5f3ea8252825a27": {
                "Name": "kibana",
                "EndpointID": "40aa21617581b7fea4bc7131ef7cdb6440ba59d51d94347ccc06f2fc4a310d4c",
                "MacAddress": "02:42:ac:12:00:03",
                "IPv4Address": "172.18.0.3/16",
                "IPv6Address": ""
            }
        },
        "Options": {}
    }
]
$

確かに2つのコンテナがこのネットワーク上にあるようだ。ということは、ネットワーク設定を特に指定せずに上げたコンテナからのアクセスはできないのだろう。確認。

$ docker run -ti --rm centos:7 bash
[root@6f62b52fef18 /]# cat /etc/hosts
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::0    ip6-localnet
ff00::0    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
172.17.0.3    6f62b52fef18
[root@6f62b52fef18 /]# ping 172.18.0.2
PING 172.18.0.2 (172.18.0.2) 56(84) bytes of data.
^C
--- 172.18.0.2 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3015ms

[root@6f62b52fef18 /]# ping 172.18.0.3
PING 172.18.0.3 (172.18.0.3) 56(84) bytes of data.
^C
--- 172.18.0.3 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3007ms

[root@6f62b52fef18 /]#

サブネットが異なる。Composeで起動したコンテナは”172.18.0.0/16“のネットワークに接続されているが、何もネットワークの指定をしないでコマンドで起動したコンテナは、デフォルトの”bridge“ネットワークに起動されている。こちらは”172.17.0.0/16“のネットワークのようだ。

Composeで稼働させたコンテナ群でのみアクセス可能なようである。もちろん後からネットワークの接続を繋げることも可能なはずである。

以上。