There’s your Christmas present.
24lb turkey, started it at 10:30 last night, looking golden delicious this morning!
Because of the performance issues with starting up a Docker for Windows container, I decided to uninstall it and go back to the Docker Toolbox and try out .NET Core 2.0. I’m much more pleased with the experience — Docker is definitely a lot more usable with a Linux OS! Furthermore, it turns out Hyper-V totally Elephant’ed my video drivers (there’s a lot of posts on the web about that), so NetFlix and “streaming” became a contradiction in terms.
Disabled Hyper-V (a much less painful process than enabling it) and uninstalled Docker. Yet, WTF, there is still 20GB of docker crap left in the ProgramData folder.
And it can’t be deleted — the typical “Administrator access is required” but my user account is an administrator BS in Windows. Find a post on the Docker forum that basically says “yeah, deleting ProgramData\Docker is really hard, we could do a better job of it, you should use docker rmi before uninstalling Docker.” Or something like that. Great, if there’s a command I can run manually, why can’t the uninstaller run it?
So more Googling, trying to take ownership of the file (fail) and I find this post that basically says:
- Boot into Safe mode. (Figuring out how to do that in W10 was yet another Google and 5 screens of restart options.)
- After reboot, do a “robocopy” of ProgramData\Docker to somewhere else.
- After the robocopy finishes, you can remove the directory with rd /S /Q (include subfolders, and don’t prompt for every freaking folder.)
What do you know, that worked. I’ve now reclaimed the 20GB that Docker for Windows failed to install.
Unfortunately, uninstalling Docker for Windows had a few pain points as well. In my not-so-humble opinion, Microsoft has a ways to go for Docker for Windows to be a viable container development option.
Thank you, Arnold, for this concise and direct message.
This was a fun article to write (here on Code Project). The neat thing about the solver (besides the interactive UI) is that I demonstrate three techniques for solving the puzzle:
- Recursive with the C# yield operator
- Recursive, demonstrating a “step and continue” approach
From Code Project:
If it walks like a duck, and quacks like a duck, it’s probably gonna throw exceptions at runtime. – Mladen Janković