Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

amuyikam
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away