Created
November 30, 2013 16:11
-
-
Save eliasp/7720943 to your computer and use it in GitHub Desktop.
A short python script to remove orphaned Docker volumes
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
import json | |
import os | |
import shutil | |
import subprocess | |
import re | |
dockerdir = '/var/lib/docker' | |
volumesdir = os.path.join(dockerdir, 'volumes') | |
containers = dict((line, 1) for line in subprocess.check_output('docker ps -a -q -notrunc', shell=True).splitlines()) | |
volumes = os.walk(os.path.join(volumesdir, '.')).next()[1] | |
for volume in volumes: | |
if not re.match('[0-9a-f]{64}', volume): | |
print volume + ' is not a valid volume identifier, skipping...' | |
continue | |
volume_metadata = json.load(open(os.path.join(volumesdir, volume, 'json'))) | |
container_id = volume_metadata['container'] | |
if container_id in containers: | |
print 'Container ' + container_id[:12] + ' does still exist, not clearing up volume ' + volume | |
continue | |
print 'Deleting volume ' + volume + ' (container: ' + container_id[:12] + ')' | |
volumepath = os.path.join(volumesdir, volume) | |
print 'Volumepath: ' + volumepath | |
shutil.rmtree(volumepath) |
Hi there, useful script, I also made a couple of fixes for docker 1.3
https://gist.github.com/emagma/f3de4ed66e65012fdac1
It seems like this doesn't clean the /var/lib/docker/vfs/dir
folders. Do those also need to be removed in order to fully remove a volume?
@hxu, as this script is written, I found it only cleans out the metadata and not the data. I used this script as the basis for https://github.com/cloudnautique/docker-volume-cleanup I'd be interested in feedback.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks for the script! Just made two minor changes when using newer docker version (currently 1.1.2):
https://gist.github.com/yorch/39c96308e00fd21eaa94