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ではそんなフォルダはないよと言われてしまいます。
version: '3'
services:
nginx:
image: nginx
ports:
- "8080:80"
volumes:
- nginx-volume:/mounted
volumes:
nginx-volume:
確認
$ 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を探してもありません。
$ 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記事が端的で良かったのですが、screenで接続しようとすると依然そんなファイルないよというエラーが発生してしまいます。
$ 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 でどうも仮想マシンの保存場所が変更されたらしいというコメントがあり、次のようにttyのPathを変えるとVMにscreenで接続することができました。
$ screen ~/Library/Containers/com.docker.docker/Data/vms/0/
linuxkit-025000000001:~#
linuxkit-025000000001:~# ls /var/lib/docker/volumes/test-project_nginx-volume/
_data
公式ドキュメント確認
そんな変更いつしたんだろうと思い調べると、リリースノート に次のように載っていました。
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