Docker容器在不同的Linux主机上提供不同的ls -f(readdir)结果

问题描述 投票:1回答:1

[我们正在尝试使用docker容器以使我们的软件构建在基准环境中可重复。构建工具链中的一种工具(Wind River)称为mkromfs,它可以抓取某些文件夹中的文件,将它们转换为文件系统,然后可以在targert平台(这是嵌入式设备)上加载到rom中,但这并不重要。这里)。问题是:该实用程序依赖于文件的文件系统顺序,并且在Linux RHEL主机上运行容器时会产生不同的结果,而在Linux VM中运行容器时会产生不同的结果(启用Linux容器支持的Windows Docker,我不知道里面有什么Linux发行版...)。基本上,可以通过生成包含文件ab的文件夹,然后在该文件夹上执行ls -f来快速重现相同的内容,不同的主机以不同的顺序提供文件(尽管结果似乎以便在该特定主机上可重复)。

我们使用的容器最新基于ubuntu,但是如果我尝试其他基础映像,也会发生相同的问题,它似乎依赖于主机系统,而不是容器(我猜它实际上以某种方式使用了主机文件系统,但是我以为码头工人使用工会FS)。

现在,我当然不想冒风险,将来有人会尝试在稍有不同的Linux主机上重复进行构建,而结果会有所不同。我也理解ls -f的顺序(或内部的readdir())由操作系统和文件系统给出。我也不能更改mkromfs实用程序,因为没有可用的源。

到目前为止我的尝试和想法:

  • [在容器中有一个具有可预测文件系统的文件夹(至少是一个文件夹),所以我想挂载ramfs或tmpfs之类的文件,不幸的是,容器中似乎不允许这样做(拒绝了权限)
  • 将我们的romfs内容制作为单个文件,这样就不必担心订购了(我不喜欢这样,因为这意味着要使用集成技术来修改最终产品,这对我来说是不得已的选择...)
  • 切换到虚拟机以提高可重复性。 (我绝对想避免这种情况,容器要小得多且速度更快...)
  • 添加用于docker映像的文件系统的要求,我们使用的RHEL机器将它安装在ext3文件系统上,我还没有尝试过,而且我不确定这是否有帮助,而且我仍然不知道该使用什么文件系统Windows Dockers中的Linux VM主机使用或如何确定...

是否有某种方法可以保存docker容器方法并使此过程可重复?理想情况下,在远程Linux主机上的容器中运行的构建与在运行支持Linux的Docker的Windows 10计算机上没有任何区别。我是整个docker容器技术的新手,部分是Linux的新手,我一定错过了一些东西...

docker filesystems containers repeat
1个回答
0
投票

我找到了适合我的情况的解决方案,以防万一将来有人需要它:

docker run -t -d --mount type=tmpfs,destination=/build myimage

这样,容器中的/ build目录在所有计算机上都使用相同的文件系统(至少到目前为止看起来是这样)。有关更多信息,请访问https://docs.docker.com/storage/tmpfs/

通过此更改,ls -f和实用程序将提供相同的结果。

© www.soinside.com 2019 - 2024. All rights reserved.