5

我想在内存中运行整个 docker 容器,而不将卷映射到主机的硬盘。

此处描述的 TMPFS有助于将卷挂载为“内存卷”,但我正在寻找一种如何启动映射到内存的整个容器的方法。

--volume-driver可能是我必须使用的,但我找不到支持的驱动程序的记录列表(不是overlay2)。

所以,我试过:

docker run -td --name my-container --volume-driver tmpfs container-image
docker run -td --name my-container --volume-driver memfs container-image

但在这两种情况下,docker inspect my-container我都观察到:

    "GraphDriver": {
        "Data": {
            "LowerDir": "/var/lib/docker/overlay2/d1d112972c6b531976dd33e27edf213fc578856c3ee96b99c9afe53ad3f71a5e- ... /diff",
            "MergedDir": "/var/lib/docker/overlay2/d1d112972c6b531976dd33e27edf213fc578856c3ee96b99c9afe53ad3f71a5e/merged",
            "UpperDir": "/var/lib/docker/overlay2/d1d112972c6b531976dd33e27edf213fc578856c3ee96b99c9afe53ad3f71a5e/diff",
            "WorkDir": "/var/lib/docker/overlay2/d1d112972c6b531976dd33e27edf213fc578856c3ee96b99c9afe53ad3f71a5e/work"
        },
        "Name": "overlay2"
    }

docker stats还指出我这两种情况都使用默认映射策略。

4

1 回答 1

2

有一个问题已被关闭以执行此操作。这是评论的链接https://github.com/moby/moby/issues/10490#issuecomment-311892718

本质上,它配置 docker 将图像保存在 RAM 中。它会做你想做的事,但如果你关闭,你会丢失你的图像。

现在,我不确定您为什么要这样做,但我会推断出我认为您的需求可能是什么:

  • 在容器运行后您不希望有任何痕迹:然后,添加--rm将删除将始终创建的文件的标志。这使您的运行保持清洁,但可能并不完全安全。

  • 出于安全原因,您不希望将必须写入的任何数据保留在磁盘上:然后您必须安装 tmpfs ( https://docs.docker.com/engine/reference/run/#tmpfs- mount-tmpfs-filesystems)在容器中的某个地方,只写在那里。请记住,如果使用交换,内容将被写入磁盘,并且可能可以恢复。

  • 您想要快速读取容器中已经存在的数据:那么我认为您最好的选择是,当您的容器启动时,将您需要快速访问的数据复制到安装在容器中的 tmpfs 中。

我希望我抓住了您的用例并有所帮助,如果没有,请说出来:)

于 2019-04-08T14:47:06.047 回答