创建大小有限的docker卷

时间:2018-08-30 04:59:09

标签: docker docker-volume

关于带有选项“ https://docs.docker.com/engine/reference/commandline/volume_create/”的创建卷的信息非常有限。

我只想创建一个有限大小的卷,

docker volume create --opt o=size=10m hello-volume

,当使用“ docker run -v hello-volume:/ hello -it ubuntu / bin / bash”运行一个简单的hello world容器时,出现类似“ docker:daemon的错误响应:…之类的错误”设备” ...

因此,我假设创建卷时必须提供完整的选项,例如

“docker volume create --driver local --opt type=*** --opt device=*** --opt o=size=10m hello-volume”

? 如果是这样,这里的“类型”和“设备”是什么?我猜该设备实际上是任何目录的路径?我尝试过

“docker volume create --driver local --opt type=volume --opt device=/ --opt o=size=10m hello-volume”.

当尝试以“ docker run -v hello-volume:/ hello -it ubuntu / bin / bash”的身份运行容器时,出现以下错误:“ docker:守护程序的错误响应:安装卷'/ var /时出错lib / docker / volumes / hello-volume / _data':安装带有以下选项的卷时出错:type ='volume'device ='/'o ='size = 10m':没有此类设备。”

我尝试过

docker volume create --driver local --opt type=tmpfs --opt device=tmpfs --opt o=size=10m hello-volume

最终可以正常工作,但是数据在内存中并不持久。那么,在创建卷时,有谁能指出“类型”和“设备”的选项是什么(如果我们不提供任何选项,默认值是什么)?

更新

只想更新一下,似乎没有办法限制ext4类型的本地驱动程序中的磁盘大小(尽管在一些答案和其他文章中声称是可行的)。主要原因是“ ext4”文件系统中没有这样的“ size”参数。 我创建了一个Docker卷:

docker volume create --driver local --opt type=ext4 --opt device=/dev/xvdf --opt o=size=10m hello-volume

然后检查它(docker volume检查hello-volume),然后将其安装在容器中,目前一切正常。

[
    {
        "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

但是,当您在该容器的“ / myfile1”中写入/放置一个大文件(大于10m)时,没有引发警报/异常,则写入成功。我认为ext4类型的文件系统无法识别“ o = size = 10m”。

3 个答案:

答案 0 :(得分:3)

使用dockers local卷驱动程序实际上是可行的。该驱动程序接受类似于linux mount选项的选项。看看这个出色的answer

您的尝试已结束。您需要指定一个--opt device=和一个--opt type=选项。这实际上会将主机上的块设备作为卷安装到Docker容器中。 type选项指定要使用的文件系统类型。 device选项要求您指定主机上的一个块设备-例如/dev/sda2。您可以通过运行lsblk来查看完整列表。

但是,映射现有驱动器将是一个坏主意(除非未使用它们)。因此,您将需要创建一个新的块设备(使用lvm或等效的设备),或者像您尝试的那样,可以使用易失性存储(tmpfs)进行测试。

答案 1 :(得分:1)

Docker卷附有“驱动程序”。 The default driver is one called "local"及其作用是在/var/lib/docker中创建一个目录并将其安装到容器中。无法指定(或限制)卷的大小。

答案 2 :(得分:1)

我使用xfs_quota解决了限制docker卷上空间的问题(通过将目录与-v绑定)

我需要存储数据的位置是使用prjquota选项安装的XFS卷

#~ mount 
/dev/mapper/centos_ssp--forfiter--07-home on /home type xfs (rw,[..],**prjquota**)

我认为内核必须支持它(rootflags = pquota内核选项)

上面链接中的示例:

Enabling project quota on an XFS filesystem (restrict files in log file directories to only using 1 gigabyte of space).
# mount -o prjquota /dev/xvm/var /var
# echo 42:/var/log >> /etc/projects
# echo logfiles:42 >> /etc/projid
# xfs_quota -x -c 'project -s logfiles' /var
# xfs_quota -x -c 'limit -p bhard=1g logfiles' /var

还有一个用于docker cirocosta/xfsvol的插件