As you may know, Docker Desktop on macOS runs a Linux VM in the background to run containers on macOS (since containers are a Linux concept). However, that VM is well hidden from view and you typically only interact with it when you start Docker Desktop or when you need to clean up images in the VM itself.
Sometimes you’ll want to have a shell into that VM, but that turns out to be more complicated than I initially expected. There is however an easily accessible debug shell available.
- First, open a terminal and use
socatto open the debug shell socket to the VM using the following command:
$ socat -d -d ~/Library/Containers/com.docker.docker/Data/debug-shell.sock pty,rawer
socatwill print the line “
PTY is /dev/ttys010“, to which you can then connect to using
screenon another terminal window:
$ screen /dev/ttys0xx
So that will look something like this:
$ socat -d -d ~/Library/Containers/com.docker.docker/Data/debug-shell.sock pty,rawer 2021/01/02 21:28:43 socat N opening connection to LEN=73 AF=1 "/Users/simon/Library/Containers/com.docker.docker/Data/debug-shell.sock" 2021/01/02 21:28:43 socat N successfully connected from local address LEN=16 AF=1 "" 2021/01/02 21:28:43 socat N successfully connected via 2021/01/02 21:28:43 socat N PTY is /dev/ttys010 2021/01/02 21:28:43 socat N starting data transfer loop with FDs [5,5] and [6,6] $ screen /dev/ttys010 / # / # uname -a Linux docker-desktop 4.19.121-linuxkit #1 SMP Tue Dec 1 17:50:32 UTC 2020 x86_64 Linux
The VM is a very stripped down Alpine image with no package manager available, so you’ll have to make do with what is available.
Quit with CTRL-D, which will also close the
socat socket. Thanks to Tatsushi for figuring it out in this GitHub Gist.