How to remove docker

How to remove docker

I tried using docker for something. That something failed, so I decided to uninstall docker.

The problem with removing docker

Ubuntu, and Debian both use the apt package manager. This makes installing, removing, upgrading, etc. really easy.

So, I thought a simple

sudo apt purge docker.io

would do the job for me. And it seemed like that, until, out of nowhere:

Removing docker.io (1.13.1-0ubuntu1~16.04.2) ...
'/usr/share/docker.io/contrib/nuke-graph-directory.sh' -> '/var/lib/docker/nuke-graph-directory.sh'
Purging configuration files for docker.io (1.13.1-0ubuntu1~16.04.2) ...

Nuking /var/lib/docker ...
(if this is wrong, press Ctrl+C NOW!)

+ sleep 10

/var/lib/docker/nuke-graph-directory.sh: 64: /var/lib/docker/nuke-graph-directory.sh: shopt: not found
dpkg: error processing package docker.io (--purge):
subprocess installed post-removal script returned error exit status 127
Processing triggers for man-db (2.7.5-1) ...
Errors were encountered while processing:
docker.io
E: Sub-process /usr/bin/dpkg returned an error code (1)

More specifically, the problem is in this line:

/var/lib/docker/nuke-graph-directory.sh: 64: /var/lib/docker/nuke-graph-directory.sh: shopt: not found
dpkg: error processing package docker.io (--purge):

For those of you that don’t know what the shopt command is(including me):

$ type shopt
shopt is a shell builtin

so, shopt is part of bash. Naturally, the next reasonable thing is to view the contents of /var/lib/docker/nuke-graph-directory.sh. The first line contained the following:

#!/bin/sh

/bin/sh is the dash shell, not bash. It is faster than bash, but at the expense of quite a few features. So, in the shell /bin/sh:

type shopt
shopt: not found

Bam! I found the problem. shopt, a shell builtin, simply does not exist in the shell the script was using.

The solution

It’s quite simple actually, just edit the /var/lib/docker/nuke-graph-directory.sh file, and change the first line to:

#!/bin/bash

This makes it so the script will be run with the bash shell, which does have the shopt builtin.

Time to try again!

sudo apt purge docker.io

This time, I got:

Nuking /var/lib/docker ...
(if this is wrong, press Ctrl+C NOW!)

+ sleep 10

+ rm -rf /var/lib/docker/containers /var/lib/docker/image /var/lib/docker/network /var/lib/docker/nuke-graph-directory.sh /var/lib/docker/overlay2 /var/lib/docker/plugins /var/lib/docker/swarm /var/lib/docker/tmp /var/lib/docker/trust /var/lib/docker/volumes
dpkg: warning: while removing docker.io, directory '/etc/docker' not empty so not removed

Yay, one problem down! About /etc/docker; I didn’t want it taking up space on my SSD, so a simple rm -rf /etc/docker did the job. Docker is now fully uninstalled.

This is what I like about Linux

In Linux distros, you get a real error message if something goes wrong, not just “something went wrong”. If you know what you’re doing, fixing problems in Linux is much easier, thanks to amazing error and debugging logs. If something like this happened on Windows, you’d probably need at least a few days to find solutions, trying everything you see on the internet one by one. With Linux, read the error message, edit a file, and you’re done. Oh, and Linux is free Windows 10 is $100 🙂 .

Leave a Reply(Markdown is On)

%d bloggers like this: