Posted at

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ではそんなフォルダはないよと言われてしまいます。


docker-compose.yml

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