MacBook – I can’t install Docker. Does the CPU in Macbook Pro 2010, support the hypervisor framework? If so, why does `sysctl kern.hv_support` return 0

dockermacbook provirtualization

I have a Macbook Pro 2010

I have a problem running Docker, it says

"Fatal Error.
Incompatible CPU detected
Docker requires a processor with virtualization capabilities. "

enter image description here

Processor in there is Core 2 Duo P8600 2.4GHz

https://ark.intel.com/products/35568/Intel-Core2-Duo-Processor-P8600-3M-Cache-2_40-GHz-1066-MHz-FSB?q=p8600 It says it supports VT-x

While it supports VT-x, I am guessing perhaps it doesn't support some later virtualization capabilities because this later CPU, the i5 760, launched Q3'10 (not in my laptop), https://ark.intel.com/products/48496/Intel-Core-i5-760-Processor-8M-Cache-2_80-GHz has a newer page that has some other things listed related to virtualization For example the i5 mentions "IntelĀ® Virtualization Technology for Directed I/O (VT-d):No" and "IntelĀ® VT-x with Extended Page Tables (EPT):yes". For my processor(the core2duo P8600), the page is a bit older in design, as the CPU was launched Q3'08 while it says I have VT-x it doesn't say yes or no as to whether I have EPT or VT-d .

Though perhaps VT-d is irrelevant.

I notice https://developer.apple.com/documentation/hypervisor mentions

"Generally, machines with an Intel VT-x feature set that includes Extended Page Tables (EPT) and Unrestricted Mode are supported. You can determine the availability of Hypervisor APIs on a particular machine at runtime with the sysctl(8) command, passing kern.hv_support as an argument."

I have read that there are two issues here that may or may not be connected.

  1. The CPU may indeed not support virtualization, and I read here https://forums.docker.com/t/fatal-error-incompatible-cpu-detected/9162/6 that the way to check is to run the command $ sysctl kern.hv_support<ENTER> and if the result is e.g.kern.hv_support: 1then it's fine, and if the result iskern.hv_support: 0` then it's not fine.

  2. It's possible to have a CPU that supports virtualization but that there is something in a MAC that is like a BIOS or like a UEFI.. that commonly disables virtualization. I read somewhere(don't recall where, and it may be wrong), that all Macbook Pro 2010s have a CPU that supports virtaualization and it's purely this issue that it needs to be enabled.

I found a solution mentioned here

https://github.com/dreamcat4/efi-enable-vtx

One method it says is temporary which is to go into sleep mode then wake out of it. For me that doesn't work.

The other method it lists, to "Set EFI VT-X Register bit"

I tried it but am running into an issue. It lists 33 steps.. To summarise as far as I got.

Download rEFIt disk image, mount it, you see an efi folder, copy it to root, copy vmx folder in the dreamcat5/efi-enable-vtx git repository into /efi, run cd /efi/refit run ./enable.sh That runs a sudo command. In my case it didn't prompt for a password perhaps cos I had already run a command with sudo. Restarted it holding ALT as it started up. Reached step 12 which is "Select rEFIt boot device to enter rEFIt menu." But then I don't get the rEFit menu. So I can't continue with steps like "In rEFIt menu, select Console."

Do I need to upgrade my CPU? And if so, where can I see a list of Core 2 Duos that meet the virtualization requirements? (Since clearly my CPU supports VT-x), but perhaps it doesn't meet the requirements.

I understand that another option is to install an earlier version of Docker that uses the docker toolbox. i'm not sure to what extent that is a disadvantage, but it's also something i'm considering. But i'd like to see if I can use the latest version of docker.

added

Clicking the diagnose and feedback button

Docker for Mac: version: 17.12.0-ce-mac49 (d1778b704353fa5b79142a2055a2c11c8b48a653)
macOS: version 10.12.6 (build: 16G29)
logs: /tmp/5FE6B0F8-0B3C-4C7A-A5CB-24B1A5AD4D4C/20180210-135141.tar.gz
failure: sysctl -a reports no hypervisor support
[OK]     db.git
[ERROR]  vmnetd
         /var/tmp/com.docker.vmnetd.socket does not exist
         Unexpected error (No such file or directory) connecting to /var/tmp/com.docker.vmnetd.socket
         /private/tmp/vmnetd/com.docker.vmnetd is not running
[OK]     dns
[ERROR]  driver.amd64-linux
         com.docker.driver.amd64-linux is not running
[OK]     virtualization VT-X
[OK]     app
[ERROR]  moby
         /Users/apple/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring does not exist
[OK]     system
[OK]     moby-syslog
[OK]     kubernetes
[OK]     env
[ERROR]  virtualization kern.hv_support
         sysctl -a reports no hypervisor support
[ERROR]  slirp
         Unexpected error ((Failure
  "Error connecting socket to 9p endpoint unix:/Users/apple/Library/Containers/com.docker.docker/Data/s51: Unix.Unix_error(Unix.ENOENT, \"connect\", \"\")")) connecting to /Users/apple/Library/Containers/com.docker.docker/Data/s51
         com.docker.vpnkit is not running
         slirp check failed with: Unix.Unix_error(Unix.ENOENT, "connect", "")
[ERROR]  osxfs
         com.docker.osxfs is not running
[OK]     moby-console
[OK]     logs
[ERROR]  docker-cli
         cannot find docker
         /var/run/docker.sock does not exist
         Unexpected error (No such file or directory) connecting to /var/run/docker.sock
         /Users/apple/Library/Containers/com.docker.docker/Data/s60 does not exist
         Unexpected error (No such file or directory) connecting to /Users/apple/Library/Containers/com.docker.docker/Data/s60
         docker ps failed
[OK]     menubar
[ERROR]  disk
         No Docker.qcow2 or Docker.raw found: the VM has never been started

Added further

I see there is a github.com/docker/for-mac/issues link mentioned in that docker screen after clicking diagnose&feedback, then clicking diagnose or diagnose and upload. I've asked there and will update.

Best Answer

the laptop doesn't support it https://github.com/docker/for-mac/issues/2591. Some in 2010 might have, but not all and mine's one that doesn't. It's the CPU that is lacks the apple virtualisation that docker needs. An older version of docker would work but uses virtual machine and is really inferior. IIRC from when I looked into it, The CPU can't simply be replaced individually, it sits on ,is soldered into, another part and while it may be that that part can be replaced, it is quite an expensive part and it's not much more, or similar price, to get a new laptop than to replace that part.

VT-d is not required. There is a link from intel that I mentioned in this chat https://chat.stackexchange.com/transcript/message/49711462#49711462 and the link tried to suggest that it was required in the case of docker for windows, but knowledgeable contributors pointed out that it isn't required not for docker on windows and not for docker on mac.

Some comments on an answer at this link https://superuser.com/questions/1419233/does-virtualbox-require-a-cpu-to-support-vt-d-in-order-to-host-64bit-guest-oss also explains further , and i've included the comments there here

n8te writes "Docker originated on Linux and is developed mostly for Linux. When run on Linux it uses the host kernel and doesn't require VT-x since it's not that type of virtualization. But to get Docker to work on Windows or Mac, you have to use an underlying hypervisor just to get it to work."

n8te writes see What are the hardware requirements for Hypervisor.framework? which says Apple's documentation for the Hypervisor framework (https://developer.apple.com/library/mac/documentation/DriversKernelHardware/Reference/Hypervisor/index.html) mentions that the processor needs to support Unrestricted Mode, which is a feature available only on a Westmere or newer generation Intel processor...Westmere generation was released on January of 2010

--
The command the questioner ran for seeing if docker i.e. docker's requirements on mac, so, the ability to run a hypervisor, is supported, is spot on $ sysctl kern.hv_support<ENTER>