Docker Machineで Error creating machine: Error in driver during machine creation: Maximum number of retries (5) exceeded で詰まった時の対応

## これなんだ
MacでDocker Machineはじめた際に詰まったエラーの解決策の一つです。
エラー内容: `Error creating machine: Error in driver during machine creation: Maximum number of retries (5) exceeded`

## 環境
MacBook Pro (Retina, 13-inch, Mid 2014)
VirtualBox 5.0.8r103449

## とりあえずドキュメント通りにやる
チュートリアル通りDocker ToolboxのMac版を入れる
https://www.docker.com/docker-toolbox

### マシン作ってみるがSSHで接続できないとエラーが出る
```
$ docker-machine -D create --driver virtualbox dev

|
| (略)
|

(dev) DBG | Getting to WaitForSSH function...
(dev) DBG | Using SSH client type: external
(dev) DBG | About to run SSH command:
(dev) DBG | exit 0
(dev) DBG | SSH cmd err, output: exit status 255:
(dev) DBG | Error getting ssh command 'exit 0' : Something went wrong running an SSH command!
(dev) DBG | command : exit 0
(dev) DBG | err     : exit status 255
(dev) DBG | output  :

|
| (略)
|

Error creating machine: Error in driver during machine creation: Maximum number of retries (5) exceeded
```

### Docker Quickstart Terminal.appを起動してみる
そもそもDocker Quickstart Terminal.appでも起動しないことがわかった
起動しないというかSSHに繋げないだけでマシンが立っている

## 調査
### SSHでどう繋いでるか確認

```
$ docker-machine -D ssh dev
|
| (略)
|
&{/usr/bin/ssh [/usr/bin/ssh -o PasswordAuthentication=no -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=no docker@127.0.0.1 -i ~/.docker/machine/machines/dev/id_rsa -p 22]
|
| (略)
|
exit status 255
```

### 繋がらないので普通にSSHコマンド叩いてみる
```
$ /usr/bin/ssh -o PasswordAuthentication=no -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=no docker@127.0.0.1 -i ~/.docker/machine/machines/dev/id_rsa -p 22
```

### createした時のログを見直した
```
(dev) DBG | Forwarding(0)="ssh,tcp,127.0.0.1,62910,,22"
```

22じゃなくて62910?

### 指定されてるPORTでSSHしてみる
```
$ /usr/bin/ssh -o PasswordAuthentication=no -o IdentitiesOnly=yes -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=quiet -o ConnectionAttempts=3 -o ConnectTimeout=10 -o ControlMaster=no -o ControlPath=no docker@127.0.0.1 -i ~/.docker/machine/machines/dev/id_rsa -p 62910
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.9.0, build master : 16e4a2a - Tue Nov  3 19:49:22 UTC 2015
Docker version 1.9.0, build 76d6bc9
docker@boot2docker:~$
```

繋がった

## 接続情報の確認

```
$ docker-machine inspect dev
|
| (略)
|
  "SSHPort": 0,
|
| (略)
|
```

### それはおかしいので62910変更してみる
```
$ vim ~/.docker/machine/machines/dev/config.json
```

### 再度確認
```
docker-machine inspect dev
|
| (略)
|
  "SSHPort": 0,
|
| (略)
|
```
反映されない

### VirtualBox ?
VirtualBoxなのかなぁと再インストールしたりしてもダメだった。

## 解決方法
ネットワーク周りだと当たりつけてvboxnetの削除(自分の場合は6まであった)

```
$ VBoxManage list hostonlyifs | grep -e '^Name'
Name:            vboxnet0
Name:            vboxnet1
Name:            vboxnet2
Name:            vboxnet3
Name:            vboxnet4
Name:            vboxnet5
Name:            vboxnet6
$ VBoxManage hostonlyif remove vboxnet0
$ VBoxManage hostonlyif remove vboxnet1
$ VBoxManage hostonlyif remove vboxnet2
$ VBoxManage hostonlyif remove vboxnet3
$ VBoxManage hostonlyif remove vboxnet4
$ VBoxManage hostonlyif remove vboxnet5
$ VBoxManage hostonlyif remove vboxnet6
```

### 再度挑戦

```
$ docker-machine create --driver virtualbox dev
Running pre-create checks...
Creating machine...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Provisioning created instance...
^[^[Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
To see how to connect Docker to this machine, run: docker-machine env dev

$ docker-machine ssh dev
                       ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 1.9.0, build master : 16e4a2a - Tue Nov  3 19:49:22 UTC 2015
Docker version 1.9.0, build 76d6bc9
docker@dev:~$
```

無事繋がりました。

### そもそもvboxnetの何がいけなかったか
その辺りはしっかり調査はできてません。
ただ、以前からVagrantを結構使っていたため過去に作ったVagrantのIPとDocker Machineとバッティングしたのがきっかけな気がします。
詳しくはこの辺りを。
https://github.com/docker/machine/issues/1031

## まとめ
正確にはわかってないのですが、多分vboxnetを調整すれば解決する気がしてます。