在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.json
configuration文件。
到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与screen
( brew install screen
如果你没有)
$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
用root
login,没有密码
moby:~# /etc/init.d/docker stop moby:~# rm -rf /var/lib/docker/*
按ctrl – d退出提示
用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 ps
或docker images
消失。 我不得不重新设置git仓库,并重新启动Docker,以便我的configuration更改回来,然后所有的数据都回来了。
马特是正确的,默认的Docker-for-Mac内核不支持devicemapper,但通常,有一个更好的方法来更改守护进程选项:
启动Mac的Docker。 点击菜单栏中的鲸鱼,然后点击首选项
点击
单击“高级”并提供用于自定义守护程序设置的JSON。
然后单击应用并重新启动,然后检查更改:
$ 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然后将其提供给容器的方式是不可能的。