FAQs for Docker Desktop for Mac

为什么我不断收到通知,告知我某个应用程序更改了我的桌面配置?

您收到此通知是因为“配置完整性检查”功能检测到第三方应用程序已修改您的 Docker Desktop 配置。这通常由不正确或缺失的符号链接(symlinks)导致。该通知旨在确保您了解这些变更,以便您能够审查并修复任何潜在问题,从而保障系统的可靠性。

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

如果您选择忽略此通知,它将在下次启动 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 守护进程中。

添加自定义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 主题中的使用证书验证仓库客户端