Create docker volume with limited size

孤街浪徒 提交于 2019-12-18 03:42:40

问题


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.


回答1:


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. The type option specifies the filesystem type to use. The device option requires you to specify one of the block devices on your host - /dev/sda2 for example. You can see a complete list by running lsblk.

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.




回答2:


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.



来源:https://stackoverflow.com/questions/52089499/create-docker-volume-with-limited-size

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!