IBM Cloud の ROKS 使うにあたって Mac で Docker を使えるようにした時に困ったこと(Error setting up host only network on machine start)

## Docker Desktop を使えない

料金支払い対象から逃れらない状況で docker を使いたいということで、個人的には postman 使ってみたりしていたけども、 ROKS 使うにはどうやら docker を使うのが安心だろうということで一念発起。

## すでに実現されている方を頼りに

Qiita の @kyosuke5_20 さんが書かれた[Docker Desktopを使わない（代替）Dockerのインストール for Mac](https://qiita.com/kyosuke5_20/items/cd5f3df4e827c34d7c4a ) の手順に従って進めれば、途中でエラーにならない人はすんなり使えるようになります。


## 遭遇した問題

docker-machine で仮想マシンを作るところでエラーが発生。

```console
$ sudo docker-machine create -d virtualbox default
Running pre-create checks...
Creating machine...
(default) Copying /Users/myname/.docker/machine/cache/boot2docker.iso to /Users/myname/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Found a new host-only adapter: "vboxnet0"
Error creating machine: Error in driver during machine creation: Error setting up host only network on machine start: /usr/local/bin/VBoxManage hostonlyif ipconfig vboxnet0 --ip 192.168.99.1 --netmask 255.255.255.0 failed:
VBoxManage: error: Code E_ACCESSDENIED (0x80070005) - Access denied (extended info not available)
VBoxManage: error: Context: "EnableStaticIPConfig(Bstr(pszIp).raw(), Bstr(pszNetmask).raw())" at line 242 of file VBoxManageHostonly.cpp

$
```

## 問題を解消できた方法

ネットを色々検索していると、macos のバージョンが上がってセキュリティ周りの仕様が変わったことによる影響への対処として色々出てきたが、どれを試しても解消できず、途方に暮れていたところ次の記事を発見。

stack overflowの質問[docker-machine unable to create a machine on macOS, VBoxManage returning E_ACCESSDENIED error](https://stackoverflow.com/questions/70281938/docker-machine-unable-to-create-a-machine-on-macos-vboxmanage-returning-e-acces) の回答手順がドンピシャでした。

意図としては、ホストオンリーのネットワークアダプタを全部削除して、`networks.conf` というファイルを然るべきところに作成した後、仮想マシンを作成するというもの。

リンク先消滅の危険回避のため、回答部分を転記しておくとこのような内容。

1. find all the machines with `docker-machine ls`
1. remove the ones you don't need with `docker-machine rm -y <machineName>`
1. find all the "host-only ethernet adapters" with `VBoxManage list hostonlyifs`
1. Remove the orphaned ones with `VBoxManage hostonlyif remove <networkName>`
1. Create a vbox folder in the etc directory with `sudo mkdir
1. Create a file networks.conf in the vbox folder, for example by `sudo touch`
1. place the below line there
    `* 0.0.0.0/0 ::/0`
1. create a new machine with `docker-machine create -d virtualbox <machineName>`
1. Run the command `eval $(docker-machine env <machineName>)` to configure your shell

## 無事仮想マシンを作成できた

上の手順通りに作業したあと、以下のコマンド実行で無事仮想マシンを作成し稼働させることができました！

```console
$ docker-machine create -d virtualbox default
Running pre-create checks...
Creating machine...
(default) Copying /Users/myname/.docker/machine/cache/boot2docker.iso to /Users/myname/.docker/machine/machines/default/boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env default
```

## 終わりに

情報を公開してくださっている先人に感謝いたします！

参照したQiita @kyosuke5_20 さんの記事再掲。

https://qiita.com/kyosuke5_20/items/cd5f3df4e827c34d7c4a

参照した stack overflow のアドレス再掲。
https://stackoverflow.com/a/70294241/17307024