我正在运行一个似乎内存不足的Docker容器,但不确定如何解决此问题。
我实际上是在这个Docker容器上运行一个程序,该程序将映像下载到tmpfs中,执行一些操作,删除该映像并返回结果。但是,似乎我遇到了太大而无法存储在当前docker tmpfs中的图像。以下是df在容器内时linux 命令的输出:
Filesystem Size Used Avail Use% Mounted on
overlay 63G 11G 50G 18% /
tmpfs 64M 0 64M 0% /dev
tmpfs 6.9G 0 6.9G 0% /sys/fs/cgroup
/dev/sda1 63G 11G 50G 18% /etc/hosts
shm 64M 4.0K 64M 1% /dev/shm
tmpfs 6.9G 0 6.9G 0% /sys/firmware
Run Code Online (Sandbox Code Playgroud)
我曾尝试扩展docker的内存(因此两个tmpfs都有巨大的值),但我仍然遇到这个问题。
我想我有几个问题:
1)3个独立的tmpfs文件系统之间有什么区别?它们为什么存在?
2)大概我需要扩大第一个tmpfs的大小(小的)-我将如何去做呢?
最后,一些相关的系统信息:
操作系统-OSX
Docker版本-Docker版本17.09.0-CE,构建afdb6d4
让我知道您是否还需要了解其他内容!
感谢大家。
问题:如何在 Dockerfile 或docker build命令行中指定要在构建容器中安装 tmpfs?这是在拆分构建的上下文中 - 第一个容器将使用 RAM 磁盘,从源构建应用程序,第二阶段将结果复制到新容器中。
这个问题看起来很相似,但我的动机不同。我不太关心持续存在的陈旧图像层,但我关心构建的性能。在 Docker 之外进行试验时,当整个源代码树在 RAM 中而不是在磁盘上时,构建我正在使用的特定应用程序的速度要快 4 倍以上。(该项目有许多中间构建和并行性,所以即使是 SSD 也会有一些颠簸)
由于 Docker 确实支持在正常docker run命令期间挂载 tmpfs ,似乎应该有一种方法可以将其包含在 Dockerfile 中?但是,我似乎无法在任何地方找到此信息 - 几乎所有对“tmpfs”和“dockerfile”或“build”或“ramdisk”等的搜索都指向上面链接的帖子或 Docker 中使用 tmpfs 的文档容器以docker run.
如果 tmpfs 甚至不会持续到第二个容器的程序集,那也是可以接受的。这可以通过在该容器退出之前从构建容器内的 tmpfs 中复制构建的应用程序,然后在复制时使用该新位置来简单地解决。
我想用dd测量tmpfs的性能.但它失败了,如下所示:
# dd if=/dev/zero of=/tmp/128M bs=4M count=32 oflag=direct
dd: failed to open ‘/tmp/128M’: Invalid argument
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
我有嵌入式 Linux 系统,它在 fstab 中定义了几个 tmpfs 挂载。其中一些挂载涉及到 systemd。
客户询问为什么不只有一个挂载所有易失性“RAM FS”的东西。
问题:
这可能是一个愚蠢的问题,但假设我给出了一个文件路径,并且我想知道它是否指向 tmpfs 上的文件(即,它是内存中的文件)。如何仅使用 Linux 系统调用来做到这一点?(也就是说,我不能去shell。)
我正在 Linux/Fedora 下使用扩展文件属性,目前我遇到了一些困难,因为我无法添加/更改文件的属性,而在/tmp我家里它工作正常 - 虽然两个路径都在同一个挂载点上,即,
/dev/mapper/fedora-root on / type ext4 (rw,relatime,seclabel,data=ordered)
Run Code Online (Sandbox Code Playgroud)
例如,我可以成功添加和检索主目录中文件的属性,例如
> setfattr -n user.test.md5 -v 58d8e4cd0e60facf386838cbe8b11767 ~/foo.bar
> getfattr -n user.test.md5 ~/foo.bar
# file: foo.bar
user.test.md5="58d8e4cd0e60facf386838cbe8b11767"
Run Code Online (Sandbox Code Playgroud)
但是,对于 中的同一文件,同样会失败/tmp。
> cp ~/foo.bar /tmp/foo.bar
> setfattr -n user.test.md5 -v 58d8e4cd0e60facf386838cbe8b11767 /tmp/foo.bar
setfattr: /tmp/foo.bar: Operation not supported
Run Code Online (Sandbox Code Playgroud)
我假设,对扩展属性的支持仅取决于使用 xattr 支持“正确”安装的文件系统。但是,它似乎也依赖于目录(??),我想知道,是什么阻止我在 /tmp 中设置扩展属性以及如何更改它?(这似乎与 SELinux 无关——至少我在审核日志中没有找到任何内容。)