创建有限大小的Docker卷

bat*_*lei 6 docker docker-volume

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

我只是想创建一个有限大小的卷,我尝试过,

docker volume create --opt o=size=10m hello-volume
Run Code Online (Sandbox Code Playgroud)

,当使用“ 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”
Run Code Online (Sandbox Code Playgroud)

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

“docker volume create --driver local --opt type=volume --opt device=/ --opt o=size=10m hello-volume”.
Run Code Online (Sandbox Code Playgroud)

当尝试以“ 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
Run Code Online (Sandbox Code Playgroud)

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

更新:

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

docker volume create --driver local --opt type=ext4 --opt device=/dev/xvdf --opt o=size=10m hello-volume
Run Code Online (Sandbox Code Playgroud)

然后检查它(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
Run Code Online (Sandbox Code Playgroud)

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

moe*_*ius 5

这实际上可以使用 dockerslocal卷驱动程序实现。此驱动程序接受类似于 linux挂载选项的选项。看看这个优秀的答案

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

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


Dav*_*aze 1

Docker 卷附有“驱动程序”。 默认驱动程序称为“本地”驱动程序,它所做的只是创建一个目录/var/lib/docker并将其安装到容器中。没有选项可以指定(或限制)卷的大小。