经过不断的研究,我确实找到了答案。在 Docker for Mac 上,Docker 守护进程实际上是在 Hyperkit VM 内部运行的,而 Docker CLI 只是与在 Hyperkit 中运行的 Docker 引擎通信。此配置位于 ~/Library/Group Containers/group.com.docker/settings.json。
{
"proxyHttpMode" : "system",
"diskPath" : "~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2",
"diskSizeMiB" : 65536,
"cpus" : 5,
"defaultMachineMigrationStatus" : 4,
"memoryMiB" : 9216,
"displayedWelcomeWhale" : true,
"buildNumber" : "26764",
"autoStart" : true,
"kubernetesInitialInstallPerformed" : true,
"channelID" : "stable",
"checkForUpdates" : true,
"settingsVersion" : 1,
"kubernetesEnabled" : true,
"version" : "18.06.1-ce-mac73",
"displayedWelcomeMessage" : true,
"analyticsEnabled" : true,
"linuxDaemonConfigCreationDate" : "2017-10-24 15:59:40 +0000",
"dockerAppLaunchPath" : "/Applications/Docker.app"
}
当 Docker 启动时,它会将这些设置分配给 hyperkit 作为命令行参数:com.docker.hyperkit -A -u -F vms/0/hyperkit.pid -c 5 -m 9216M。
默认情况下,当运行 docker 容器时,docker 会分配 hyperkit 的所有内存和 CPU 供它们使用,但可以被 docker run 参数覆盖。