Docker Desktop for Mac 常见问题
什么是 HyperKit?
HyperKit 是在 macOS 的 Hypervisor.framework 之上构建的虚拟机监控程序。它完全在用户空间运行,没有其他依赖项。
Docker 使用 HyperKit 消除了对其他虚拟机产品(如 Oracle VirtualBox 或 VMware Fusion)的需求。
HyperKit 有什么好处?
HyperKit 比 VirtualBox 和 VMware Fusion 更精简,并且包含的版本是针对 Mac 上的 Docker 工作负载定制的。
Docker Desktop 将 Linux 容器和镜像存储在哪里?
Docker Desktop 将 Linux 容器和镜像存储在 Mac 文件系统中一个大的“磁盘镜像”文件中。这与 Linux 上的 Docker 不同,后者通常将容器和镜像存储在 /var/lib/docker 目录中。
磁盘镜像文件在哪里?
要找到磁盘镜像文件,请从 Docker Desktop 面板中选择**设置**,然后从**资源**选项卡中选择**高级**。
**高级**选项卡显示磁盘镜像的位置。它还显示磁盘镜像的最大大小以及磁盘镜像实际占用的空间。请注意,其他工具可能会以最大文件大小而不是实际文件大小来显示文件的空间使用情况。
如果文件太大怎么办?
如果磁盘镜像文件太大,您可以:
- 将其移动到更大的驱动器
- 删除不必要的容器和镜像
- 减小文件的最大允许大小
如何将文件移动到更大的驱动器?
要将磁盘镜像文件移动到其他位置:
从**资源**选项卡中选择**设置**,然后选择**高级**。
在**磁盘镜像位置**部分,选择**浏览**并为磁盘镜像选择一个新位置。
选择**应用**以使更改生效。
重要不要直接在 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。
如何减小文件的最大大小?
要减小磁盘镜像文件的最大大小:
从**资源**选项卡中选择**设置**,然后选择**高级**。
**磁盘镜像大小**部分包含一个滑块,允许您更改磁盘镜像的最大大小。调整滑块以设置下限。
选择**应用**。
当您减小最大大小时,当前的磁盘镜像文件将被删除,因此所有容器和镜像都将丢失。
如何添加 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
或者,如果您只想将证书添加到您自己的本地钥匙串(而不是所有用户),请运行此命令:
$ 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 证书添加到 macOS 系统登录中:
/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 主题中的使用证书验证存储库客户端。