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

这基本上是这个问题的后续,但现在,因为OS X Docker不再需要Docker Toolbox(即不再需要VirtualBox),所以我完全失去了如何从AUFS切换到devicemapper或别的东西。

我在这里面临的问题是AUFS 缺less硬链接支持 ,这会在安装Android SDK期间出现问题,所以我希望devicemapper能够帮助我。

那么,如何在OS X中更改Docker原生实现的存储驱动?

Docker for Mac运行的Alpine Linux VM不支持devicemapper驱动程序,但可以运行overlay2驱动程序。

没有用于pipe理此configuration的用户界面Docker for Mac UI已更新为包含“守护程序”部分,您可以在其中编辑docker.jsonconfiguration文件。

到Docker图标>“首选项”>“守护程序”>“高级”,并将storage-driver设置为overlay2

 { "storage-driver": "overlay2" } 

查看kojiros答案完整的一步一步的细节。

手动configuration编辑

您可以修改 ~/Library/Containers/com.docker.docker/Data/database Mac上的Dockerconfiguration文件。

这个目录是一个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 

尽pipe在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守护程序configuration文件,以包含overlay2存储驱动程序。

 $ vi com.docker.driver.amd64-linux/etc/docker/daemon.json 

在启动新的存储驱动程序之前,VM上的Docker将需要删除大部分/var/lib/docker 。 这将删除所有的容器,图像和卷! 事先备份需要的任何东西。

附加到虚拟机的tty与screenbrew install screen如果你没有)

 $ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty 

rootlogin,没有密码

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

ctrld退出提示

ctrl退出屏幕会话,然后d

现在,您可以在Mac上提交更改

 $ git commit -m overlay com.docker.driver.amd64-linux/etc/docker/daemon.json 

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

您现在有一个Docker for Mac VM与overlay2存储驱动程序一起运行。 如果这不能解决你的问题,那么在做一些工作的时候,你也许可以弄清楚如何在虚拟机中使用devicemapper支持。 一旦你想出来的步骤都是一样的。

注意升级到Docker for Mac可能会导致一些怪异现象。 最后升级所有容器/图像从docker psdocker images消失。 我不得不重新设置git仓库,并重新启动Docker,以便我的configuration更改回来,然后所有的数据都回来了。

马特是正确的,默认的Docker-for-Mac内核不支持devicemapper,但通常,有一个更好的方法来更改守护进程选项:

启动Mac的Docker。 点击菜单栏中的鲸鱼,然后点击首选项

码头鲸鱼菜单,突出显示偏好选项

点击 Docker for Mac首选项中的守护程序图标

单击“高级”并提供用于自定义守护程序设置的JSON。

守护进程/高级下的Docker首选项对话框

然后单击应用并重新启动,然后检查更改:

 $ docker info | grep Stor Storage Driver: overlay2 

即使使用docker-for-mac,你仍然可以在OSX下使用hyperkit / xhyve进行虚拟化,因为Darwin内核仍然不能运行docker“natively ”。 因此,您不能select像您实际正在假设的存储驱动程序。 另请阅读最后一个公告要点https://docs.docker.com/docker-for-mac/docker-toolbox/#/the-docker-for-mac-environment

在安装时,Docker for Mac提供了一个基于Alpine Linux的HyperKit虚拟机,运行Docker Engine。 它在/var/tmp/docker.sock中的套接字上公开docker API

在docker-for-mac上使用OSXFS将OSX本地文件夹共享到xhyve slim vm这样Linux内核/ os(alpine)会在启动容器时将其选中,然后将所有卷绑定到“vms文件系统”同步。

AFAIK没有办法在docker-for-mac下select存储驱动程序,因为OSXFS从主机同步到alpine-vm然后将其提供给容器的方式是不可能的。