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
socat
to 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
socat
will print the line “PTY is /dev/ttys010
“, to which you can then connect to using screen
on 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[23508] 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[23508] N successfully connected from local address LEN=16 AF=1 ""
2021/01/02 21:28:43 socat[23508] N successfully connected via
2021/01/02 21:28:43 socat[23508] N PTY is /dev/ttys010
2021/01/02 21:28:43 socat[23508] 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.
With OpenShift 4, Red Hat introduced Red Hat Enterprise Linux CoreOS. It is a very minimalist operating system, focused on running container workload.
This new minimalism comes with some challenges. There are no more RPM packages and most of the tools we know and love are missing! Luckily, there is the Red Hat supplied toolbox
container that contains all the necessary tools and is nicely integrated.
So to start the toolbox, use oc debug node/<nodename>
. This will start a privileged container on the node you specify, mount the host file system on /host
and drop you into a shell:
$ oc debug node/worker-0.lab.openshift.krenger.ch
Starting pod/worker-0labopenshiftkrengerch-debug ...
To use host binaries, run `chroot /host`
If you don't see a command prompt, try pressing enter.
sh-4.2# chroot /host
sh-4.4# toolbox
Container started successfully. To exit, type 'exit'.
sh-4.2#
Now we are running in the toolbox
container on our CoreOS host with all the tools we know at our disposal, for example sosreport
:
sh-4.2# sosreport
Running sosreport
will generate a sosreport in /host/var/tmp/
, which means it will be accessible in /var/tmp/
on the CoreOS host itself.
On one database, I noticed that SQL*Plus did not show the heading of the columns when I ran a query. The result was this:
SQL> select instance_name,status from v$instance;
mydb OPEN
Even when entering “set heading on” didn’t change anything. I then investigated and found out that someone had changed the $ORACLE_HOME/sqlplus/admin/glogin.sql
file (SQL*Plus runs this file on startup) and added the following lines:
SET LINESIZE 150
SET PAGESIZE 0
While this is quite nice and replaced the suboptimal default values, this was the cause for my problems mentioned above. Changing the line “SET PAGESIZE 0” to “SET PAGESIZE 1000” solved the problem and now, the query shows up the way I wanted:
SQL> select instance_name,status from v$instance;
INSTANCE_NAME STATUS
---------------- ------------
mydb OPEN