docker
boot2docker

boot2dockerを利用したIPを変えたい

More than 1 year has passed since last update.

ぽえむ

あるイントラネット内、 re:dashのDocker版をインストールし、DB接続して使おうとした。
しかし、DB側のIP帯が、 172.17.xxx.xxx

boot2dockerのブリッジ接続で利用しているデフォルトIP帯。

172.17.0.0/16

docker-network-bridge
$ docker network inspect bridge
[
    {
        "Name": "bridge",
        "Id": "37262f6715263e87db026d5501a08a3c24db5243e1235696d19f762ac2bac69a",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Containers": {},
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

完全にかぶってますなぁ...

環境

docker-machine -> Virtualbox -> docker-compose -> re:dash

解決策

--fixed-cidr, --bip を追加する

ただし、Linuxのやり方と違うので注意。Linuxのばっかり載ってるんですわ。ひどいですわ。
boot2dockerが特殊なのだろうなぁ。

Linux版の参考: http://knowledge.sakura.ad.jp/knowledge/4786/

$ docker-machine ssh redash
$ cat /var/lib/boot2docker/profile
EXTRA_ARGS='
--label provider=virtualbox

'

$ vi /var/lib/boot2docker/profile
EXTRA_ARGS='
--label provider=virtualbox
--fixed-cidr=192.168.100.0/24
--bip=192.168.100.1/24
'

以下、ボツ案

docker network で頑張ろうとしたパターン

docker-network
$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
dd738187eba6        bridge              bridge              local ←既にあるbridge
048888e14045        host                host                local               
a628ca4f5158        none                null                local   

既にある bridge のIP帯変えよう

変更不可

既にある bridge 消そう

$ docker network rm bridge
Error response from daemon: bridge is a pre-defined network and cannot be removed

消せない

新しいネットワーク作ってそちらを通そう

$ docker network create --driver bridge --subnet 192.168.101.0/24 --gateway=192.168.101.1 \
-o "com.docker.network.bridge.enable_icc"="true" \
-o "com.docker.network.bridge.enable_ip_masquerade"="true" \
-o "com.docker.network.bridge.host_binding_ipv4"="0.0.0.0" \
-o "com.docker.network.driver.mtu"="1500" \
redash
docker-compose.yml
version: '2'
services: 
    xxxxxx
networks:
  default:
    external:
      name: redash

同じIP帯が消えないので、結局意味ない。(気づくの遅い)

参考

http://superbrothers.hatenablog.com/entry/2014/06/19/234210
https://github.com/boot2docker/boot2docker/blob/master/doc/FAQ.md

Docker♡コンテナ