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

Change storage driver for Docker on OS X

这基本上是一个后续to this question,但现在由于OS X Docker不再需要Docker工具箱(即不再需要VirtualBox),我完全不知道如何从 AUFS 切换到 devicemapper 或其他东西。

我在这里也面临的问题是 AUFS 中的 the missing hardlink support,它在安装 Android SDK 时出现问题,所以我希望 devicemapper 会帮帮我。

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

Mac 运行 的 Docker 的 Alpine Linux VM 不支持 devicemapper driver 但它可以 运行 overlay2 driver。

尚无 UI 用于管理此配置 Mac UI 的 Docker 已更新为包含一个"Daemon" 部分,您可以在其中编辑 docker.json 配置文件。

找到 Docker 图标 > "Preferences" > "Daemon" > "Advanced" 并将 storage-driver 设置为 overlay2

{ "storage-driver": "overlay2" }

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

手动配置编辑

您在 ~/Library/Containers/com.docker.docker/Data/database 中 mac 上的 can modify the Docker config 个文件。

这个目录是一个 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 存储 driver。

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

Docker 需要删除大部分 /var/lib/docker,然后才能开始使用新存储 driver。这将删除 您所有的容器、图像和卷!事先备份您需要的任何内容。

使用 screen 附加到 VM 的 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

退出提示

退出屏幕 session 使用 ctrl-a 然后 d

现在您可以在 mac

上提交更改
$ git commit -m overlay com.docker.driver.amd64-linux/etc/docker/daemon.json

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

您现在有一个 Docker 用于 Mac VM 运行 overlay2 存储 driver。如果这不能解决您的问题,通过一些工作您可能会弄清楚如何在 VM 中也获得 devicemapper 支持。一旦你弄明白了,步骤都是一样的。

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

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

开始 Docker Mac。 单击菜单栏中的鲸鱼,然后单击首选项

点击

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

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

$ docker info | grep Stor
Storage Driver: overlay2

这已经随着时间的推移而改变,前面的答案不再正确。 2022-03-12 https://docs.docker.com/storage/storagedriver/select-storage-driver/ “Mac 的 Docker 桌面不支持修改 storage-driver”