适用于 Mac 的 Docker Desktop 的常见问题解答

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

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

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

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

如果要关闭配置完整性检查通知,请导航到 Docker Desktop 的设置,然后在 General 选项卡中清除 Automatically check configuration 设置。

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

什么是 HyperKit?

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

我们使用 HyperKit 来消除对其他 VM 产品(如 Oracle)的需求 VirtualBox 或 VMWare Fusion。

HyperKit 有什么好处?

HyperKit 比 VirtualBox 和 VMWare fusion 更薄,并且包含的版本针对 Mac 上的 Docker 工作负载进行了定制。

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

特权帮助程序进程由 和 启动 在后台运行。除非连接到该进程,否则该进程不会消耗任何资源,因此可以安全地忽略它。com.docker.vmnetdlaunchdDocker.app

Docker Desktop 将 Linux 容器和镜像存储在何处?

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

磁盘镜像文件在哪里?

要查找磁盘镜像文件,请从 Docker Desktop 控制面板中选择 设置,然后从 Resources 选项卡中选择 Advanced

Advanced (高级) 选项卡显示磁盘镜像的位置。它还显示磁盘镜像的最大大小和磁盘镜像占用的实际空间。请注意,其他工具可能会根据最大文件大小而不是实际文件大小来显示文件的空间使用情况。

如果文件太大怎么办?

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

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

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

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

  2. Disk image location(磁盘镜像位置)部分中,选择 Browse(浏览)并为磁盘镜像选择新位置。

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

重要

请勿直接在 Finder 中移动文件,因为这可能会导致 Docker Desktop 丢失对文件的跟踪。

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

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

$ 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

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

如何减小文件的最大大小?

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

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

  2. Disk image size (磁盘镜像大小) 部分包含一个滑块,允许您更改磁盘镜像的最大大小。调整滑块以设置下限。

  3. 选择应用并重新启动

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

如何添加 TLS 证书?

您可以添加受信任的证书颁发机构 (CA)(用于验证注册表 服务器证书)和客户端证书(用于验证 注册表)添加到您的 Docker 守护程序中。

添加自定义 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

或者,如果您希望仅将证书添加到自己的本地密钥链(而不是 than for all users),请改为运行以下命令:

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

另请参阅 的目录结构 证书

注意

您需要在对钥匙串进行任何更改后重新启动 Docker Desktop,或者 添加到目录中,以使更改生效。~/.docker/certs.d

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

添加客户端证书

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

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

注意

  • 对钥匙串进行任何更改后,您需要重新启动 Docker Desktop 或目录,以便进行更改 影响。~/.docker/certs.d

  • 注册表不能列为不安全的注册表。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 主题中的使用证书验证存储库客户端