适用于Mac的Docker Desktop常见问题

为什么我一直收到通知,告诉我某个应用程序更改了我的Desktop配置?

您收到此通知是因为配置完整性检查功能检测到第三方应用程序已更改您的Docker Desktop配置。这通常是由于符号链接不正确或缺失造成的。此通知确保您了解这些更改,以便您可以审查和修复任何潜在问题以保持系统可靠性。

打开通知会显示一个弹出窗口,其中提供有关检测到的完整性问题的详细信息。

如果您选择忽略通知,则只有在下次Docker Desktop启动时才会再次显示该通知。如果您选择修复配置,则不会再次收到提示。

如果您想关闭配置完整性检查通知,请导航到Docker Desktop的设置,然后在“常规”选项卡中,清除“自动检查配置”设置。

如果您对如何进一步改进配置完整性检查功能有任何反馈,请填写反馈表

什么是HyperKit?

HyperKit 是一个构建在 macOS 中 Hypervisor.framework 之上的虚拟机管理程序。它完全在用户空间运行,没有其他依赖项。

我们使用 HyperKit 来消除对其他虚拟机产品的需求,例如 Oracle VirtualBox 或 VMWare Fusion。

HyperKit的好处是什么?

HyperKit 比 VirtualBox 和 VMWare Fusion 更轻量级,并且包含的版本是为 Mac 上的 Docker 工作负载定制的。

为什么在我退出应用程序后com.docker.vmnetd仍在运行?

特权辅助进程com.docker.vmnetdlaunchd启动并在后台运行。除非Docker.app连接到它,否则该进程不会消耗任何资源,因此可以忽略它。

Docker Desktop在哪里存储Linux容器和镜像?

Docker Desktop 将 Linux 容器和镜像存储在 Mac 文件系统中的单个大型“磁盘映像”文件中。这与 Linux 上的 Docker 不同,后者通常将容器和镜像存储在/var/lib/docker目录中。

磁盘映像文件在哪里?

要查找磁盘映像文件,请从 Docker Desktop 仪表板中选择**设置**,然后从**资源**选项卡中选择**高级**。

**高级**选项卡显示磁盘映像的位置。它还显示磁盘映像的最大大小以及磁盘映像实际占用的空间。请注意,其他工具可能会根据最大文件大小而不是实际文件大小显示文件的使用空间。

如果文件太大怎么办?

如果磁盘映像文件太大,您可以

  • 将其移动到更大的驱动器
  • 删除不必要的容器和镜像
  • 减小文件的最大允许大小
如何将文件移动到更大的驱动器?

要将磁盘映像文件移动到其他位置

  1. 选择**设置**,然后从**资源**选项卡中选择**高级**。

  2. 在**磁盘映像位置**部分中,选择**浏览**并为磁盘映像选择新的位置。

  3. 选择**应用并重启**以使更改生效。

重要

不要直接在 Finder 中移动文件,因为这会导致 Docker Desktop 无法跟踪该文件。

如何删除不必要的容器和镜像?

检查您是否有任何不必要的容器和镜像。如果您的客户端和守护程序 API 运行的是 1.25 或更高版本(使用客户端上的docker version命令检查您的客户端和守护程序 API 版本),您可以通过运行以下命令查看详细的空间使用情况信息:

$ docker system df -v

或者,要列出镜像,请运行:

$ docker image ls

要列出容器,请运行:

$ docker container ls -a

如果有大量冗余对象,请运行以下命令:

$ docker system prune

此命令将删除所有已停止的容器、未使用的网络、悬空镜像和构建缓存。

根据磁盘映像文件的格式,在主机上回收空间可能需要几分钟时间。如果文件名为

  • Docker.raw,则将在几秒钟内回收主机上的空间。
  • Docker.qcow2,空间将在几分钟后由后台进程释放。

只有在删除镜像时才会释放空间。删除正在运行的容器内的文件不会自动释放空间。要随时触发空间回收,请运行以下命令:

$ docker run --privileged --pid=host docker/desktop-reclaim-space

请注意,许多工具报告的是最大文件大小,而不是实际文件大小。要从终端查询主机上文件的实际大小,请运行:

$ cd ~/Library/Containers/com.docker.docker/Data/vms/0/data
$ ls -klsh Docker.raw
2333548 -rw-r--r--@ 1 username  staff    64G Dec 13 17:42 Docker.raw

在此示例中,磁盘的实际大小为2333548 KB,而磁盘的最大大小为64 GB。

如何减小文件的大小?

减小磁盘镜像文件的最大大小

  1. 选择**设置**,然后从**资源**选项卡中选择**高级**。

  2. “**磁盘镜像大小**”部分包含一个滑块,允许您更改磁盘镜像的最大大小。调整滑块以设置较低的限制。

  3. 选择**应用并重启**。

当您减小最大大小时,当前的磁盘镜像文件将被删除,因此所有容器和镜像都将丢失。

如何添加TLS证书?

您可以将受信任的证书颁发机构 (CA)(用于验证注册服务器证书)和客户端证书(用于对注册表进行身份验证)添加到您的 Docker daemon。

添加自定义 CA 证书(服务器端)

所有受信任的 CA(根 CA 或中间 CA)都受支持。Docker Desktop 会根据 Mac 密钥链创建所有用户信任的 CA 的证书捆绑包,并将其附加到 Moby 受信任的证书中。因此,如果主机上的用户信任企业 SSL 证书,则 Docker Desktop 也信任它。

要手动添加自定义自签名证书,首先将证书添加到 macOS 密钥链,Docker Desktop 会自动获取它。以下是一个示例

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ca.crt

或者,如果您更倾向于仅将证书添加到您自己的本地密钥链(而不是所有用户),请改用以下命令

$ security add-trusted-cert -d -r trustRoot -k ~/Library/Keychains/login.keychain ca.crt

另请参见,证书的目录结构

注意

对密钥链或~/.docker/certs.d目录进行任何更改后,都需要重新启动 Docker Desktop 才能使更改生效。

有关如何执行此操作的完整说明,请参阅博文将自签名注册表证书添加到 Docker 和 Docker Desktop for Mac

添加客户端证书

您可以将客户端证书放在~/.docker/certs.d/<MyRegistry>:<Port>/client.cert~/.docker/certs.d/<MyRegistry>:<Port>/client.key中。

当 Docker Desktop 应用程序启动时,它会将 Mac 上的~/.docker/certs.d文件夹复制到 Moby(Docker Desktop xhyve虚拟机)上的/etc/docker/certs.d目录。

注意

  • 对密钥链或~/.docker/certs.d目录进行任何更改后,都需要重新启动 Docker Desktop 才能使更改生效。

  • 注册表不能列为不安全的注册表。Docker Desktop 会忽略在不安全注册表下列出的证书,并且不会发送客户端证书。尝试从注册表提取的docker run之类的命令会在命令行以及注册表上产生错误消息。

证书的目录结构

如果您具有此目录结构,则无需手动将 CA 证书添加到您的 Mac OS 系统登录项。

/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
   ├── ca.crt
   ├── client.cert
   └── client.key

以下进一步说明并解释了使用自定义证书的配置。

/etc/docker/certs.d/        <-- Certificate directory
└── localhost:5000          <-- Hostname:port
   ├── client.cert          <-- Client certificate
   ├── client.key           <-- Client key
   └── ca.crt               <-- Certificate authority that signed
                                the registry certificate

只要 CA 证书也在您的密钥链中,您也可以拥有此目录结构。

/Users/<user>/.docker/certs.d/
└── <MyRegistry>:<Port>
    ├── client.cert
    └── client.key

要了解有关如何为注册表安装 CA 根证书以及如何设置客户端 TLS 证书以进行验证的更多信息,请参阅 Docker Engine 主题中的使用证书验证存储库客户端