在 macOS 上更改 Docker 的存储驱动程序

9
这基本上是对这个问题的跟进,但由于OS X Docker不再需要Docker Toolbox(即不再需要VirtualBox),我完全不知道如何从切换到或其他驱动程序。我面临的问题也是在中没有硬链接支持,这在安装Android SDK时会出现问题,因此我希望使用来解决这个问题。那么,我该如何更改OS X下Docker本地实现的存储驱动程序呢?
3个回答

15
The Alpine Linux虚拟机不支持devicemapper驱动,但可以运行overlay2驱动。Docker for Mac没有UI来管理此配置,但已更新为包含“Daemon”部分,您可以在其中编辑docker.json配置文件。转到Docker图标 > “Preferences” > “Daemon” > “Advanced”,将storage-driver设置为overlay2
{ "storage-driver": "overlay2" }

请参考kojiros的答案,了解完整的步骤细节。

手动配置编辑

您可以在Mac上的~/Library/Containers/com.docker.docker/Data/database中修改Docker配置文件。点击此处了解更多详情。

该目录是一个Git仓库,通常为空白:

$ cd ~/Library/Containers/com.docker.docker/Data/database
$ ls -al
total 0
drwxr-xr-x   4 user  staff  136 28 Sep 02:46 .
drwxr-xr-x  20 user  staff  680 28 Sep 02:54 ..
drwxr-xr-x  11 user  staff  374 28 Sep 02:58 .git

然而git数据库中有文件

$ git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    deleted:    com.docker.driver.amd64-linux/etc/docker/daemon.json
    deleted:    com.docker.driver.amd64-linux/etc/hostname
    deleted:    com.docker.driver.amd64-linux/etc/sysctl.conf
....

从git中检索以前的内容,请运行:
$ git reset --hard HEAD

编辑现有的docker守护进程配置文件,将overlay2存储驱动程序添加进去。
$ vi com.docker.driver.amd64-linux/etc/docker/daemon.json

在虚拟机上使用Docker需要删除/var/lib/docker大部分内容,然后才能使用新的存储驱动程序。这将删除您所有的容器、镜像和卷!请先备份任何需要的内容。
使用screen连接到虚拟机的tty(如果没有,请安装brew install screen)。
$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty

使用 root 登录,无需密码

moby:~# /etc/init.d/docker stop
moby:~# rm -rf /var/lib/docker/*

退出提示符请使用 ctrl-d 退出屏幕会话请使用 ctrl-a 然后再按 d 现在您可以将更改提交回Mac。
$ git commit -m overlay com.docker.driver.amd64-linux/etc/docker/daemon.json

提交更改后,Docker会自动拾取更改并重新启动虚拟机。

您现在运行的是Docker for Mac VM,并使用overlay2存储驱动程序。如果这无法解决您的问题,通过一些工作,您可能可以弄清楚如何在VM中使devicemapper支持正常工作。一旦您弄清楚了步骤,所有步骤都是相同的。

注意 Docker for Mac的升级可能会导致一些奇怪的情况。上次升级后,我的所有容器/镜像都从docker psdocker images中消失了。我不得不再次重置git存储库并重新启动Docker,以使我的配置更改生效,然后所有数据都回来了。


非常好,非常感谢!我会尝试这个方法。由于在此期间我已经解决了硬链接问题,但是我仍然有另一个问题,即Docker-for-Mac上映射卷的I/O性能较差(https://github.com/docker/for-mac/issues/77)。更改驱动程序是否有助于解决这个问题? - Thomas Keller
1
不,如果你从OSX挂载卷,无论Docker中的存储驱动程序是什么,它们都会使用osxfs。不过,http://docker-sync.io/ 这个工具看起来很有用,可以节省编写自己的rsync设置的时间。 - Matt
实际上,http://docker-sync.io 不仅提供 rsync 设置,还提供使用 unison+unox 的双向透明同步,能够处理 50k 个文件以上。 - Eugen Mayer
点赞是因为你的第一句话很有用,但现在UI提供了更好的方法来更改守护程序选项。请参见我的答案获取详细信息。 - kojiro
当前的Docker“edge”(17.07.0-ce-rc2-mac22(18909))报告:“storage-driver”:不能在Docker for Mac中使用。看起来现在默认为overlay2,因此不再接受该设置 :) - Dima Tisnek

11

Matt说得对,Docker-for-Mac默认内核不支持devicemapper,但通常有更好的方法来更改守护程序选项:

启动Docker for Mac。 单击菜单栏中的鲸鱼图标,然后单击“首选项”

带有高亮首选项选项的docker鲸鱼菜单

点击Docker for Mac Preferences中的Daemon图标

点击高级选项并提供自定义守护程序设置的JSON。

Daemon / Advanced下的Docker首选项对话框

然后点击应用并重启,检查更改:

$ docker info | grep Stor
Storage Driver: overlay2

3
在使用此方法之前,请考虑删除现有的所有容器和镜像,否则它们将不会被列出,并且您的磁盘将充满孤立的镜像。 docker rm $(docker ps -a -q)docker rmi -f $(docker images -a -q) - Sergio

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接