This is a tool for managing your Docker volumes.
Basically, since volumes are not yet first-class citizens in Docker they can be difficult to manage. Most people tend to have extra volumes laying around which are not in use because they didn't get removed with the container they were used with.
You can run this tool remotely just as you do with the Docker CLI. It reads
DOCKER_HOST or you can specify a host using the same syntax as with Docker, with
-H unix:///path/to/sock.sock
or --host unix:///path/to/sock.sock
.
This also works with TCP endpoints
Use this to see all your volumes, inspect them, export them, or clean them up.
The primary goal of this project is to spec out UI/API for inclusion in Docker. Some of the implementation is hacky since I specifically wanted the CLI for this to act just like the Docker CLI, that is that it doesn't need to be running on the host or have access to the host's filesystem for it to work.
The export function is horribly inefficient, for a couple of reasons:
-
The tools is inteded to be used remotely, so there is no direct access to the host FS, and as such the volumes or container filesystems.
-
The
docker cp
command, and the coorpsonding API's, do not support volumes. For instance you cannot dodocker cp jolly_torvalds:/path/to/volume
like you can for things not in volumes. well, you can, but it won't be the data in the volume... it will be the data at that location from the container's FS
To work around these issues the export function actually copies data from a volume
into a container's FS, then uses the docker cp
apis to pull it.
You can use the provided Dockerfile which will compile a binary for you or build yourself.
docker build -t docker-volumes [email protected]:cpuguy83/docker-volumes.git
docker run --name docker-volumes docker-volumes
docker cp docker-volumes:/opt/docker-volumes/docker-volumes ./
By default when compiling from the Dockerfile it will compile for linux/amd64. You can customize this using environment variables as such:
docker run -d --name docker-volumes -e GOOS=darwin -e GOARCH=amd64 docker-volumes
This would make a binary for darwin/amd64 (OSX), available for docker cp
at the
same location as above.
Alternatively, if you already have golang installed on your system you can compile it yourself:
git clone [email protected]:cpuguy83/docker-volumes.git
cd docker-volumes
go get
go build
Commands:
- list - Lists all volumes on the host
- inspect - Get details of a volume, takes ID or name from output of
list
- rm - Removes a volume. A volume is only removed if no containers are using it
- export - Creates an archive of the volume and outputs it to stdout. You can
optionally pause all running containers (which are using the requested volume)
before exporting the volume using
--pause
- import - Import a tarball generated by the export command from stdin to a
specified container. Be default it will import it into the same directory path
the volume existed on (eg, if it came from
/data
, it will put it into/data
) You can optionally specify a different volume path, but a volume must exist at that path already or you will get an error
NAME:
docker-volumes - The missing volume manager for Docker
USAGE:
docker-volumes [global options] command [command options] [arguments...]
VERSION:
1.0.0
AUTHOR:
Brian Goff - <[email protected]>
COMMANDS:
list List all volumes
inspect Get details of volume
rm Delete a volume
export Export a as a tarball. Prints to stdout
import Import a tarball produced by the export command the specified container
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--host, -H '/var/run/docker.sock' Location of the Docker socket [$DOCKER_HOST]
--help, -h show help
--version, -v print the version