There is is very limited information regarding create volume with options "https://docs.docker.com/engine/reference/commandline/volume_create/ ".
I just want to create a volume with limited size, I tried,
docker volume create --opt o=size=10m hello-volume
, when run a simple hello world container with “docker run -v hello-volume:/hello -it ubuntu /bin/bash”, I got the error as something like “docker: Error response from daemon: …no such device”…
So I assumed we must give the full options when creating the volume, such as
“docker volume create --driver local --opt type=*** --opt device=*** --opt o=size=10m hello-volume”
? If so, what are the “type” and “device” here? I guess the device actually is a path to any directory? I tried
“docker volume create --driver local --opt type=volume --opt device=/ --opt o=size=10m hello-volume”.
When tried to run the container as “docker run -v hello-volume:/hello -it ubuntu /bin/bash” I got the error as “docker: Error response from daemon: error while mounting volume ‘/var/lib/docker/volumes/hello-volume/_data’: error while mounting volume with options: type=‘volume’ device=’/’ o=‘size=10m’: no such device.”.
I tried
docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=10m hello-volume
which finally works, but the data is in memory which is not persistent. So can any one point out what are the options for “type” and “device” when creating the volume (or what’s the default one if we don’t give any options)?
Update:
Just want to update that it seems there is no way to limit the disk size in local driver with ext4 type (although claimed doable in several answers and other posts). The major reason is there is no such "size" parameter in "ext4" file system.. I created a docker volume:
docker volume create --driver local --opt type=ext4 --opt device=/dev/xvdf --opt o=size=10m hello-volume
Then inspect it (docker volume inspect hello-volume), and mount it with a container, everything looks fine for now.
[
{
"CreatedAt": "2018-09-01T04:23:57Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/hello-volume/_data",
"Name": "hello-volume",
"Options": {
"device": "/dev/xvdf",
"o": "size=10m",
"type": "ext4"
},
"Scope": "local"
}
]
docker run -v hello-volume:/myfile1 -exec -it ubuntu /bin/bash
But when you write/put a large file (larger than 10m) in the "/myfile1" in that container, no alert/exception is thrown, the write succeeded. What I think is that "o=size=10m" is not recognized by ext4 type file system.
This is actually possible using dockers
local
volume driver. This driver accepts options similar to the linux mount options. Check out this excellent answer.You were close with your attempt. You need to specify a
--opt device=
as well as a--opt type=
option. This will essentially mount a block device on your host into your docker container as a volume. Thetype
option specifies the filesystem type to use. Thedevice
option requires you to specify one of the block devices on your host -/dev/sda2
for example. You can see a complete list by runninglsblk
.However, it would be a bad idea to map existing drives (unless they are unused). So you will need to create a new block device (using
lvm
or equivalent), or for testing you can use volatile storage (tmpfs), as you have tried.I solved issue for limiting space on docker volumes (by binding dir with -v) using xfs_quota
Location where I needed to store data is a XFS volume mounted with prjquota option
I think that kernel must support it (rootflags=pquota kernel options)
Example from above link:
There is also a plugin for docker cirocosta/xfsvol
Docker volumes have "drivers" attached to them. The default driver is one called "local" and all it does is creates a directory in
/var/lib/docker
and mounts it to the container. There's no option to specify (or limit) the volume's size.