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

Tho*_*ler 8 macos docker osx-elcapitan

这基本上是这个问题的后续,但现在因为OS X Docker不再需要Docker Toolbox(即不再需要VirtualBox),我完全失去了如何切换AUFSdevicemapper或其他东西.

我在这里遇到的问题是缺少硬链接支持,AUFS在安装Android SDK期间会出现问题,所以我希望devicemapper能在这里帮助我.

那么,如何在OS X中更改Docker本机实现的存储驱动程序?

Mat*_*att 14

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

目前还没有用于管理此配置的UI.Docker for Mac UI已更新为包含"守护程序"部分,您可以在其中编辑docker.json配置文件.

进入Docker图标>"首选项">"守护程序">"高级"并设置storage-driveroverlay2

{ "storage-driver": "overlay2" }
Run Code Online (Sandbox Code Playgroud)

有关完整的分步详细信息,请参阅kojiros答案.

手动配置编辑

可以修改 Mac上的Docker配置文件~/Library/Containers/com.docker.docker/Data/database.

这个目录是一个git repo,它通常是空白的:

$ 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
Run Code Online (Sandbox Code Playgroud)

但是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
....
Run Code Online (Sandbox Code Playgroud)

要从git检索以前的内容,请运行:

$ git reset --hard HEAD
Run Code Online (Sandbox Code Playgroud)

编辑现在存在的docker守护程序配置文件,以包含overlay2存储驱动程序.

$ vi com.docker.driver.amd64-linux/etc/docker/daemon.json
Run Code Online (Sandbox Code Playgroud)

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

附上VM的tty screen(brew install screen如果你没有)

$ screen ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty
Run Code Online (Sandbox Code Playgroud)

登录root,没有密码

moby:~# /etc/init.d/docker stop
moby:~# rm -rf /var/lib/docker/*
Run Code Online (Sandbox Code Playgroud)

退出提示ctrl-d

ctrl- a然后退出屏幕会话d

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

$ git commit -m overlay com.docker.driver.amd64-linux/etc/docker/daemon.json
Run Code Online (Sandbox Code Playgroud)

Docker在提交时将自动获取更改,VM将重新启动.

您现在有一个使用overlay2存储驱动程序运行的Docker for Mac VM .如果这不能解决您的问题,通过一些工作,您可能会弄清楚如何devicemapper在VM中获得支持.一旦你想出来的步骤都是一样的.

注意升级到Docker for Mac可能会导致一些奇怪之处.上次升级我的所有容器/图像都从a docker psdocker images.我不得不再次重置git存储库并重新启动Docker以使我的配置更改返回,然后所有数据都返回.


koj*_*iro 10

Matt是正确的,默认的Docker-for-Mac内核不支持devicemapper,但一般来说,有一种更好的方法来更改守护进程选项:

启动Docker for Mac.单击菜单栏中的鲸鱼,然后单击"首选项"

docker whale菜单,突出显示首选项选项

点击 Docker for Mac偏好设置中的守护进程图标

单击"高级"并提供JSON以自定义守护程序设置.

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

然后单击Apply&Restart,并检查更改:

$ docker info | grep Stor
Storage Driver: overlay2
Run Code Online (Sandbox Code Playgroud)

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