Reclaiming Docker Disc Space on OSX
A few nights ago, after a truly horrible night's sleep complete with my first ever incidence of acid reflux, I woke to find my Mac nattering at me about being out of disc space. And by out of disc space I mean that I was down to about 3 gigs out of a terabyte sized SSD. Yikes!
Taking a look at the normal culprits yielded no surprise increases and I can distinctly recall having in excess of 30 gigs just a day or two ago. Given all the server side problems with respect to Docker and disc space that I have written about previously, I had a strong hunch that somehow Docker was involved.
Logs
My first thought was that perhaps Docker logs are huge. On OSX, Docker logs are stored here:
~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log
But a quick:
09:41 $ du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log
20K /Users/sjohnson/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/log
20K total
Nope – clearly 20K isn't anything for disc space usage.
Containers
My next thought was that perhaps Docker has some massive backing store for containers. I did a bunch of searches and ran across this Docker thread and then another thread, both of which pointed me to the Docker.qcow2 file.
Here's what a du -shc showed me on this file:
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
57G /Users/sjohnson/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
57G total
Futile Attempts to Reclaim Space
I tried the normal things like:
docker system prune
And when that failed, I tried a bash based approach:
#!/bin/bash
for item in $(docker ps -aq); do
docker stop $item
docker rm $item
done
for item in $(docker images --filter dangling=true -q); do
docker rmi $item
done
But even after both of these, I still had:
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
57G total
My Solution
Here was the approach that I used:
- Quit Docker for Mac entirely.
- rm /Users/sjohnson/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
- As best as I can tell this is actually safe because containers can always be rebuilt.
- Restart Docker
- Verify space usage:
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2 1.3G total
I then built a container and then reverified disc space usage.
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
1.3G total
I then built some more containers and then checked disc space usage:
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
3.0G total
I then started my overall "build all containers" shell script and tracked progress as it went:
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
3.0G total
09:58 $ du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
3.1G total
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
3.4G total
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
5.4G total
By the time all containers were built:
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
7.2G /Users/sjohnson/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
And now, several days later and even more deploys, it has increased again:
du -shc ~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
8.2G /Users/sjohnson/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
8.2G total