EDIT: Forgot a step
Note: This solution requires Hyper-V, a feature included in Windows 10 Pro, but not Home.
I’ve been using ODM on Windows using WebODM Manager and Docker Desktop for a while now, and it’s been working great - until it didn’t.
I found myself in a situation where I had nowhere near enough room on my drive for ODM to even run jobs, and when I upgraded to a bigger drive ODM’s storage remained at the same capacity.
I noticed on WebODM Manager that I could change the storage size and settings in Docker Desktop, by going to Settings and then Advanced - but that menu was missing!
Thankfully, I found the solution - and here’s what you can do if you have similar problems.
WARNING: This will remove your current projects and essentially reinstall your ODM instance/VM, make sure to back up completed projects first.
1. Restart/Turn on your computer and instead of allowing Windows to load, open up the BIOS/UEFI, then Enable Virtualisation if it isn’t already enabled. How this is done will vary greatly depending on your motherboard.
2. Save your settings and boot to Windows.
2. Uninstall Docker Desktop
3. Type “Windows Features” into the Windows Search Bar and choose "Turn Windows Features on or off"
4. Turn OFF “Windows Subsystem for Linux”.
5. Turn ON “Hyper-V”.
5. Click OK and reboot your computer.
6. Reinstall Docker Desktop. When you see a checkbox marked “Install components required for WSL 2” or something along those lines, UNTICK it.
7. Start WebODM.
8. When Docker Desktop starts, it will throw up an error message saying it cannot find WSL, but you can install it. DO NOT install it - Choose “Use Hyper-V” Instead.
9. You’re finished! You can now use WebODM as normal and access the Advanced menu in Docker Desktop to change settings!
Here’s what I think is happening:
Newer versions of Docker Desktop run their “containers” inside Windows Subsystem for Linux (WSL), which allows Linux to run inside Windows with full access to the computer’s resources. In this case, ODM runs inside WSL and Windows tries to handle the CPU usage, RAM and Storage space in a smart way. Unfortunately, either Docker Desktop or the ODM container itself doesn’t play nice with WSL, and won’t increase in size when it needs more storage.
Hyper-V on the other hand, is a proper Virtual Machine system that forces Windows to hand over resources and not manage them like WSL. The virtual machine has a set size, CPU cores and RAM amount that is “locked in” and cannot be accessed by any other app outside the VM, so the rest of your computer runs slower. On the plus side, this means Docker can handle the size, CPU and RAM of the VM instead of leaving Windows to manage it, and WebODM does respect these settings.
Side note: I noticed while using WSL that ODM would appear to crash if I ran something intensive like a big video game while ODM was running. I wonder if the proper Hyper-V virtual machine would be immune to this by properly locking away the resources for ODM to use?