Docker for MacのDisk Imageの場所が変わった

# TL;DR

2018年3月のstableリリースからDocker for MacのDisk Imageの場所が変わっています。

(旧) ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux
(新) ~/Library/Containers/com.docker.docker/Data/vms/0

# 動機

volumeを作成してcontainer内のファイルをホスト側に永続化するときがあります。

例えば次のようにしてvolumesでホストからcontainer内にマウントしたファイルをホスト側で見ようとしたときに、Docker for Macではそんなフォルダはないよと言われてしまいます。

```yaml:docker-compose.yml
version: '3'
services:
  nginx:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - nginx-volume:/mounted
volumes:
  nginx-volume:
```

確認

```console

$ docker-compose up # volume作成, container起動
Starting test-project_nginx_1 ... done
$ docker volume inspect test-project_nginx-volume # volumeのmountpointを確認
[
    {
        "CreatedAt": "2019-06-20T05:14:13Z",
        "Driver": "local",
        "Labels": {
            "com.docker.compose.project": "test-project",
            "com.docker.compose.version": "1.23.2",
            "com.docker.compose.volume": "nginx-volume"
        },
        "Mountpoint": "/var/lib/docker/volumes/test-project_nginx-volume/_data",
        "Name": "test-project_nginx-volume",
        "Options": null,
        "Scope": "local"
    }
]
$ ls /var/lib/docker/volumes/test-project_nginx-volume/
ls: /var/lib/docker/volumes/test-project_nginx-volume/: No such file or directory
```

2019/6時点でこの解決方法を検索したところ古い情報が多かったので、情報のアップデートになればと思います。

# 背景

Docker for Macでは、Mac上で直接Docker Engineを動かすのではなく、Macの上にVMを作ってその上でDocker Engineを動かしています。
そのため、次のようにMac上でRoot Dirを探してもありません。

```console
$ docker info | grep 'Docker Root Dir'
Docker Root Dir: /var/lib/docker
$ ls /var/lib/docker
ls: /var/lib/docker: No such file or directory
```

# 環境

手元ではDocker for Macのバージョンが `2.0.0.2` ですが、後述するように`18.03.0-ce-mac59` 以降のバージョンでこの記事の内容が有効です。

```
$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.4
BuildVersion:   18E226
$ plutil -p /Applications/Docker.app/Contents/Info.plist | grep CFBundleShortVersionString
  "CFBundleShortVersionString" => "2.0.0.2"
```

# 解決

[こちらのQiita記事](https://qiita.com/uni-3/items/9e912d0d8aa87a398cfc)が端的で良かったのですが、screenで接続しようとすると依然そんなファイルないよというエラーが発生してしまいます。

```console
$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Cannot exec '/Users/test-user/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty': No such file or directory
[screen is terminating]
```

検索すると[こちらのTips](https://gist.github.com/BretFisher/5e1a0c7bcca4c735e716abf62afad389#gistcomment-2716295) でどうも仮想マシンの保存場所が変更されたらしいというコメントがあり、次のようにttyのPathを変えるとVMにscreenで接続することができました。

```console
$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/
linuxkit-025000000001:~#
linuxkit-025000000001:~# ls /var/lib/docker/volumes/test-project_nginx-volume/
_data
```

# 公式ドキュメント確認

そんな変更いつしたんだろうと思い調べると、[リリースノート](https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-18030-ce-mac59-2018-03-26) に次のように載っていました。

> The directory holding the disk images has been renamed (from ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux to ~/Library/Containers/com.docker.docker/Data/vms/0`).

Docker for Macのstableバージョンで2018/3/26のリリースからPathが変更されているようです。


# 参考

https://docs.docker.com/docker-for-mac/release-notes/#docker-community-edition-18030-ce-mac59-2018-03-26
https://gist.github.com/BretFisher/5e1a0c7bcca4c735e716abf62afad389#gistcomment-2716295
https://qiita.com/uni-3/items/9e912d0d8aa87a398cfc