Docker临时文件策略

Aug*_*ger 17 docker

我的泊坞窗会生成一些临时文件。

是否有关于这些的鼓励策略?

如果我将它们放到/tmp我不确定它们是否会清除。

还是应该/tmp从主机公开卷?

谢谢

Pie*_* B. 24

我不知道有什么鼓励使用Docker管理临时文件的方法,因为这主要取决于您如何使用应用程序处理这些临时文件(是否应在重新启动时将其删除?定期删除?)

您可以根据自己的需要选择几种方法:

使用Docker tmpfs挂载

您可以安装一个tmpfs只要容器正在运行就可以持久保存数据的卷(例如,当容器停止时该卷中的数据将被删除),例如:

docker run --mount type=tmpfs,destination=/myapp/tmpdir someimage
Run Code Online (Sandbox Code Playgroud)

如果您可以定期重新启动容器,并且在重新启动容器时可以重新创建临时数据,则这可能很有用。但是,如果您需要能够在容器运行时清理临时数据,则这不是一个好的解决方案,因为您将需要停止容器以清理临时数据。

编辑:根据@ alexander-azarov注释,默认情况下,tmpfs卷大小不受限制,存在容器耗尽所有机器内存的风险。tmpfs-size建议使用标志来减轻这种风险,例如docker run --mount type=tmpfs,destination=/app,tmpfs-size=4096

写入容器可写层

如果未安装任何卷,则容器的可写层是将所有数据写入容器的位置。它在重新启动容器时将保持不变,但是如果删除了容器,它将被删除。

这样,仅当删除容器时,才会删除临时数据。对于短寿命的容器,这可能是一个很好的解决方案,但对于长寿命的容器却不是。

/tmp使用绑定安装器将主机安装在容器中

例如:

docker run -v /tmp/myapp-tmp-dir:/myapp/tmpdir someimage
Run Code Online (Sandbox Code Playgroud)

这将导致所有数据都写入主机/tmp/myapp-tmp-dir目录中,并且结果将取决于主机的管理方式/tmp(在大多数情况下,计算机重新启动后会清除数据)

创建并安装卷以将数据管理到

您可以创建一个包含数据的卷,例如:

docker run --mount source=myappvol,target=/myapp/tmpdir someimage
Run Code Online (Sandbox Code Playgroud)

并管理卷中的数据:将其安装在另一个容器中并清理数据,删除卷等。


这些是(几乎)完全依赖Docker功能的最常见解决方案。另一种可能性是直接从容器中运行的软件或应用程序处理临时文件,但这比与Docker相关的问题更多是与应用程序相关的问题。

  • 谢谢,我个人认为您的回答很全面。我想指出的唯一一点是:由于tmpfs挂载驻留在内存中,因此可能存在耗尽主机所有内存的风险。 (2认同)