关于带有选项“ 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”。
答案 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的插件